[R] Navigation en boucle avec IE3

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Adenadels
Niveau 2
Niveau 2
Messages : 15
Enregistré le : dim. 24 mai 2009 11:22
Localisation : Strasbourg
Status : Hors ligne

[R] Navigation en boucle avec IE3

#1

Message 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
Voici le code que j'ai testé : (les liens sont tous dans un tableau, d'où le IETableWriteToArray)
► Afficher le texte
Je pensais qu'en itération ma boucle fonctionnerait, mais la variable $i me pose problème.

Merci
Modifié en dernier par Adenadels le lun. 23 nov. 2009 18:28, modifié 2 fois.
Salutations
Jean-Luc
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] Navigation en boucle avec IE3

#2

Message 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
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] Navigation en boucle avec IE3

#3

Message 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
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
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
Adenadels
Niveau 2
Niveau 2
Messages : 15
Enregistré le : dim. 24 mai 2009 11:22
Localisation : Strasbourg
Status : Hors ligne

Re: [..] Navigation en boucle avec IE3

#4

Message 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.
Modifié en dernier par Adenadels le lun. 23 nov. 2009 18:29, modifié 1 fois.
Salutations
Jean-Luc
Adenadels
Niveau 2
Niveau 2
Messages : 15
Enregistré le : dim. 24 mai 2009 11:22
Localisation : Strasbourg
Status : Hors ligne

Re: [..] Navigation en boucle avec IE3

#5

Message 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...
Salutations
Jean-Luc
Répondre