Page 2 sur 2
Re: [..] Automatisation site debridage lien
Posté : mar. 03 juin 2014 20:08
par mikell
Rooh mais je t'ai pourtant tout dit ^^
C'est simple : dans l'exemple précédent on envoie 3 liens, donc le site renvoie 3 réponses (<div> dans le code-source) qui s'appellent link0, link1, link2
Cette partie
Code : Tout sélectionner
While 1
$source = _IEDocReadHTML($oIE)
If StringInStr($source, "displaylinksdiv validlink") and _
[color=#FF0000]StringInStr($source, "link2")[/color] Then Exitloop
Sleep(200)
Wend
vérifie que la
dernière réponse (la troisième) a bien été envoyée par le site
Donc si tu ne traites qu'un seul lien,
1/ il n'y aura que "link0" pas link1 ni link2
2/ en plus si ce lien est invalide le div principal ne s'appellera pas "displaylinksdiv validlink" mais unvalidlink ou invalidlink (je me rappelle plus)
Moi je fournis la mécanique, toi ensuite tu dois nécessairement mettre le nez dans le code-source pour que sa lumineuse signification puisse s'imposer à tes yeux éblouis

Re: [..] Automatisation site debridage lien
Posté : mar. 03 juin 2014 20:47
par silvere
Marche pas
► Afficher le texte
Code : Tout sélectionner
#include <IE.au3>
#include <Array.au3>
#cs
$User = "***"
$Pass = "***"
$oIE = _IECreate("http://www.alldebrid.fr/register/", 0, 1)
$oFormco = _IEFormGetObjByName($oIE, "connectform")
$oUser = _IEFormElementGetObjByName($oFormco, "login_login")
_IEFormElementSetValue($oUser, $User)
$oPass = _IEFormElementGetObjByName($oFormco, "login_password")
_IEFormElementSetValue($oPass, $Pass)
_IEFormSubmit($oFormco)
;_IENavigate ($oIE, "http://www.alldebrid.fr/service/")
_IEQuit($oIE)
Sleep(1000)
#ce
$lien = "http://uptobox.com/hwkxx34nufyv"
$i = debrider($lien)
_ArrayDisplay($i)
Func debrider($links)
$array = StringSplit($links, @CRLF)
$nb = $array[0] - 1
$oIE = _IECreate ("http://www.alldebrid.fr/service/", 0, 1)
$oForm = _IEFormGetObjByName ($oIE, "links")
$oElts = _IEFormElementGetCollection($oForm)
For $oElt In $oElts
If $oElt.name == "links" Then _IEFormElementSetValue($oElt, $links)
If $oElt.value == "fulllink" Then _IEAction ($oElt, "click")
Next
$oSpans = _IETagNameGetCollection($oIE, "span")
For $oSpan In $oSpans
If $oSpan.innerhtml = "Lancer le débridage !" Then
_IEAction($oSpan, "focus")
_IEAction($oSpan, "click")
ExitLoop
EndIf
Next
While 1
$source = _IEDocReadHTML($oIE)
If StringInStr($source, "displaylinksdiv validlink") and StringInStr($source, "link" &$nb) Then Exitloop
If StringInStr($source, "displaylinksdiv unvalidlink") and StringInStr($source, "link" &$nb) Then Exitloop
Sleep(200)
Wend
$deb = ""
For $i = 0 to 2
$oDiv = _IEGetObjById($oIE, "link" & $i)
Do
$innertext = $oDiv.innertext
Sleep(10)
Until StringInStr($innertext, "http")
If StringInStr($innertext, "This link isn't available on the hoster website.") Then
$deb &= "lien invalide|"
Else
$deb &= $innertext & "|"
EndIf
Next
$array = StringSplit($deb, "|")
$array[0]= $array [0]-1
_ArrayDelete($array,UBound($i)-1)
_IEQuit($oIE)
Return $array
EndFunc
Re: [..] Automatisation site debridage lien
Posté : mar. 03 juin 2014 22:50
par mikell
silvere... niveau 8 avec 529 messages... j'y crois pas
Ton code comporte des erreurs que tu aurais pu trouver tout seul, j'en cite juste une : StringSplit($links, @CRLF)
Bon alors j'imagine que ce que tu veux en fait, c'est une fonction qui va traiter les liens d'une liste non pas par lot mais l'un après l'autre
Donc ouala
Ce code n'utilise rien que que des éléments pris dans mes codes précédents ...

► Afficher le texte
Code : Tout sélectionner
#include <IE.au3>
#cs
$User = "***"
$Pass = "***"
$oIE = _IECreate("http://www.alldebrid.fr/register/", 0, 1)
$oFormco = _IEFormGetObjByName($oIE, "connectform")
$oUser = _IEFormElementGetObjByName($oFormco, "login_login")
_IEFormElementSetValue($oUser, $User)
$oPass = _IEFormElementGetObjByName($oFormco, "login_password")
_IEFormElementSetValue($oPass, $Pass)
_IEFormSubmit($oFormco, 0)
Sleep(2000)
;_IEQuit($oIE)
ProcessClose("iexplore.exe")
#ce
;===========================
$list = "http://uptobox.com/hwkxx34nufyv" &@crlf& _
"http://uptobox.com/b9veukfwtl6n" &@crlf& _
"http://uptobox.com/5k9zpaayg6b4"
$links = StringSplit($list, @crlf, 1)
$res = ""
For $i = 1 to $links[0]
$deblink = _Debrid($links[$i])
Msgbox(0, "lien " & $i, $deblink)
$res &= $deblink & @crlf
Next
Msgbox(0,"résultats", $res)
;============================
Func _Debrid($link)
$oIE = _IECreate ("http://www.alldebrid.fr/service/", 0, 0)
$oForm = _IEFormGetObjByName ($oIE, "links")
$oElts = _IEFormElementGetCollection($oForm)
For $oElt In $oElts
If $oElt.name == "links" Then _IEFormElementSetValue($oElt, $link)
If $oElt.value == "fulllink" Then _IEAction ($oElt, "click")
Next
$oSpans = _IETagNameGetCollection($oIE, "span")
For $oSpan In $oSpans
If $oSpan.innerhtml = "Lancer le débridage !" Then
_IEAction($oSpan, "focus")
_IEAction($oSpan, "click")
ExitLoop
EndIf
Next
While 1
$source = _IEDocReadHTML($oIE)
If StringInStr($source, "displaylinksdiv") and StringInStr($source, "link0") Then Exitloop
Sleep(200)
Wend
Do
$oDiv = _IEGetObjById($oIE, "link0")
$deb = $oDiv.innertext
Until not StringInStr($deb, "Wait")
ProcessClose("iexplore.exe")
Sleep(500)
Return $deb
EndFunc
Re: [..] Automatisation site debridage lien
Posté : mar. 03 juin 2014 23:01
par silvere
Malheureusement avec le temps l'autoit s’oublie (C'est la seule excuse que j'ai )

Le
Replacerais le
Car sinon il y aurais un bug comme je l'ai remarqué avec la boucle for ?
Je n’obtiens qu'une seule messagebox pour les liens debrider alors que je devrais en avoir 2
Merci encore !
Re: [..] Automatisation site debridage lien
Posté : mar. 03 juin 2014 23:13
par mikell
silvere a écrit :Malheureusement avec le temps l'autoit s’oublie
Fichtre ! on croirait entendre mon arrière-grand-tante
Sinon en cours de test j'ai remarqué que étrangement, _IEQuit($oIE) ne fermait pas IE contrairement à ProcessClose("iexplore.exe")
Donc (par flemme) j'ai pas cherché plus loin

Re: [R] Automatisation site debridage lien
Posté : mer. 04 juin 2014 22:52
par mikell
Pour le fun, une version plus compacte (et plus rapide) de la fonction _Debrid, intéressante pour 2 raisons :
- on peut exploiter le texte de la page oueb avant que celle-ci ait fini de charger (notamment les crasses et iframes googlesyndication, fessebouc et compagnie)
- un genre sympa de form.submit qui appelle directement la fonction javascript concernée
Code : Tout sélectionner
<FORM name=links action="">
.....
<DIV class=debrid_button><A class=small_button onclick=javascript:giveMeMyLink() rel=nofollow><SPAN>Lancer le débridage !</SPAN></A> </DIV></DIV></FORM>
Attention, à corriger dans le code ":" = ":"
► Afficher le texte
Code : Tout sélectionner
Func _Debrid($link)
$oIE = ObjCreate("InternetExplorer.Application")
$oIE.visible = 0
$oIE.navigate("http://www.alldebrid.fr/service/")
;; $oIE.focus()
Do
$source = $oIE.document.body.innerhtml
Until StringInStr($source, "displaylinks")
$oForm = $oIE.document.forms.item("links")
$oForm.elements.item("links").value = $link
$oForm.elements("view").value("fulllink").checked = true
$oIE.document.parentwindow.execScript("javascript[b]:[/b]giveMeMyLink();")
Do
$source = $oIE.document.body.innerhtml
Until StringInStr($source, "displaylinksdiv")
Do
$deb = $oIE.document.getElementById("link0").innertext
Until not StringInStr($deb, "Wait")
ProcessClose("iexplore.exe")
Return $deb
EndFunc
Re: [R] Automatisation site debridage lien
Posté : jeu. 05 juin 2014 22:00
par silvere
Tu est tout simplement génial, quand je rentre je l'essaye je t'en dirais des nouvelles !
Edit : C'est parfait ! on voit la différence niveau temps merci !