Page 1 sur 1
[R] Navigation en boucle avec IE3
Posté : sam. 21 nov. 2009 08:38
par Adenadels
Mon problème :
Une page internet avec plusieurs liens, qui pointent vers d'autres liens...
Mon problème, je voudrais créer un arbre de tous les liens hiérarchiquement.
J'arrive sur la première page, j'arrive à cliquer sur le premier lien, et ainsi de suite.
Mais ensuite, il faut que je retourne sur la page -1 afin d'explorer les liens suivant... et encore la page -1 jusqu'à arriver à ma page d'origine.
Exemple plus parlant :
► Afficher le texte
Code : Tout sélectionner
[i]Page1-lien1
Page1-Lien2
Page2-lien1
Page2-lien2
Page2-lien3
Page3-lien1[/i]
Une fois que je suis arrive en Page3-lien1, je voudrais revenir à la page 2 et poursuivre avec le lien2 puis lien3, en au final revenir à la page1 et poursuivre avec le lien2.
Voici le code que j'ai testé :
(les liens sont tous dans un tableau, d'où le IETableWriteToArray)► Afficher le texte
Code : Tout sélectionner
#include <Array.au3>
#include <IE.au3>
$oIE = _IECreate ("site intranet")
_Parcourir()
Func _Parcourir()
$oTable = _IETableGetCollection ($oIE, 0)
$aTableData = _IETableWriteToArray ($oTable)
For $i = 1 TO UBound($aTableData, 2) - 1
If StringInStr($aTableData[2][$i], 'ÚlÚment') Then
$Lien = StringStripWS ($aTableData[0][$i], 1)
MsgBox(0, '', $lien)
_IELinkClickByText ($oIE, $Lien)
_Parcourir()
Endif
Next
EndFunc
;_IEQuit($oIE)
Je pensais qu'en itération ma boucle fonctionnerait, mais la variable $i me pose problème.
Merci
Re: [..] Navigation en boucle avec IE3
Posté : sam. 21 nov. 2009 13:02
par sylvanie
bonjour et bienvenu sur ce forum.
Pour l'instant je n'ai pas d'idée sur le sujet, mais sur un point de vue administratif merci de ne pas utiliser la coloaration dans cette partie du forum (elle est pour les udf)
Bon courrage
Re: [..] Navigation en boucle avec IE3
Posté : sam. 21 nov. 2009 17:22
par sylvanie
j'ai du un peu coder à l'aveugle, car je n'ai pas réussit à le personnaliser pour qu'il marche sur des sites s'exple, donc je vous laisserai tester ...
► Afficher le texte
Code : Tout sélectionner
#include <Array.au3>
#include <IE.au3>
_IEErrorHandlerRegister ()
Global $indice=0
_Parcourir()
Func _Parcourir()
Local $oIE,$oTable,$aTableData,$i,$Lien,$ctrl
ConsoleWrite($indice&@CRLF)
$indice+=1
$oIE = _IECreate ("www.google.fr")
If $oIE = 0 Then Return
$oTable = _IETableGetCollection ($oIE, 0)
If $oTable = 0 Then
_IEQuit($oIE)
$oIE=0
Return
EndIf
$aTableData = _IETableWriteToArray ($oTable)
ConsoleWrite(@Error&@CRLF)
If Not IsArray($aTableData) Then
_IEQuit($oIE)
$oIE=0
EndIf
For $i = 1 TO UBound($aTableData, 2) - 1
If StringInStr($aTableData[2][$i], 'ÚlÚment') Then
$Lien = StringStripWS ($aTableData[0][$i], 1)
ConsoleWrite($lien&@CRLF)
$ctrl = _IELinkClickByText ($oIE, $Lien)
If $ctrl = 0 Then ContinueLoop
_Parcourir()
Endif
Next
_IEQuit($oIE)
$oIE=0
EndFunc
;_IEQuit($oIE)
Le script de départ n'est pas loins. les modifs essentiels :
Tout mettre en portée locale à la fonction, sinon (en global par défaut) à la première itération toutes les anciennes varialbles seront écrasées.
Idem pour l'obj IE que j'ai inclus dans la fonction (donc on va en avoir un certains nombres ...) et il faut donc gérer la destruction en sortie.
Tenez nous au courrant
Re: [..] Navigation en boucle avec IE3
Posté : sam. 21 nov. 2009 18:21
par Adenadels
Merci...
Dans une fonction les variables sont quand même en global par défaut... faudra que je le retienne ça...
Je vais tester le code lundi.. vu que c'est un intrAnet, je n'ai pas d'accès au site de chez moi.
J'ai enlevé la coloration syntaxique.
Re: [..] Navigation en boucle avec IE3
Posté : lun. 23 nov. 2009 18:28
par Adenadels
Voici le code qui a fonctionné :
Code : Tout sélectionner
[spoiler=]#include <Array.au3>
#include <IE.au3>
#include <String.au3>
_IEErrorHandlerRegister ()
; Ouverture du site
$oIE = _IECreate ("http://www.intranet.fr")
_IELoadWait ($oIE)
; Création du fichier texte de sortie
$FicOut = FileOpen("DTC.txt", 2)
; Check if file opened for reading OK
If $ficOut = -1 Then
MsgBox(0, "Erreur", "Création dtc.txt impossible")
Exit
EndIf
; Gestion de l'indentation
$Espace = 0
; Lancement de la boucle
_Parcourir()
Func _Parcourir()
; variables de suivi en LOCAL pour gestion de l'itération
Local $oTable,$aTableData,$i,$Lien,$ctrl
; tous les liens sont toujours dans une table
$oTable = _IETableGetCollection ($oIE, 0)
; lecture des liens (si colonne 3 contient élément -> lien, sinon simple fichier)
$aTableData = _IETableWriteToArray ($oTable)
; on parcoure tous les liens
For $i = 1 TO UBound($aTableData, 2) - 1
; Si lien on y va, et on indente la sortie
If StringInStr($aTableData[2][$i], 'élément') Then
$Lien = StringStripWS ($aTableData[0][$i], 1)
; on trace le lien et on indente de 2 espaces
FileWriteLine($FicOut, _StringRepeat(" ", $Espace) & $lien)
$Espace += 2
$ctrl = _IELinkClickByText ($oIE, $Lien)
_IELoadWait ($oIE)
If $ctrl = 0 Then ContinueLoop
_Parcourir()
Else
; Sinon on trace les fichiers
$Lien = StringStripWS ($aTableData[0][$i], 1)
FileWriteLine($FicOut, _StringRepeat(" ", $Espace) & $lien)
Endif
Next
; retour arrière dans IE
_IEAction ($oIE, "back")
_IELoadWait ($oIE)
; indentation - 2 espaces.
$Espace -=2
EndFunc
_IEQuit($oIE)
FileClose($FicOut)[/spoiler]
Merci à toi Sylvanie pour ton aide
PS : dans ton code, il s'ouvrait autant de fenêtres que de liens, mais toujours sur la première page !! mais en aveugle, c'était pas évident...