[..] _IECreate et les erreurs

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

[..] _IECreate et les erreurs

#1

Message par Laddy »

Bonjour à tous,

j'ai un petit soucis de compréhension je pense sur la gestion des erreurs de _IECreate.
Je pensai que @error <>0 allait résoudre mon soucis mais ce n'est pas le cas, lorsque le navigateur me dit : La page Web ne peut pas être affichée
il ne passe pas à l'autre lien, pourquoi ?
Les exemples de la documentation ne m'ont pas aidé

Merci d'avance à ceux qui me répondront.

Code : Tout sélectionner

#include <GUIConstantsEx.au3>
#include <IE.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

;tableau
Global $tut01[2]
$tut01[0] = "hXXp://www.bibou0007.com/t3146-tuto-de-antivir-9-fr" ; lien inaccessible
$tut01[1] = "http://www.donnemoilinfo.com/tuto/AntiVir/"

Global $Form1_1 = GUICreate("PIC & IE", 200, 100, -1, 1)
Global $Pic39 = GUICtrlCreatePic(@DesktopDir &"\avira.gif", 10, 10, 16, 16, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
GUISetState(@SW_SHOW)
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
Case $Pic39
            For $i = 0 To $tut01
                _IECreate($tut01[0])
                IF @error = 0 Then ; si réussi sortir de la boucle
                    ExitLoop 
                If @error <> 0 Then ; si echec alors ouvrir 2nd lien sinon messagebox
                    _IECreate($tut01[1])
                Else
                    MsgBox(48, "Indisponible", "Tutoriels indisponibles")
                EndIf
                EndIF
            Next

                EndSwitch
WEnd
 
Avatar du membre
sksbir
Niveau 7
Niveau 7
Messages : 384
Enregistré le : lun. 26 oct. 2009 17:57
Localisation : Lyon
Status : Hors ligne

Re: [..] _IECreate et les erreurs

#2

Message par sksbir »

Bonjour

_Iecreate est là pour créer une fenêtre Internet Explorer. Une fois cette fenêtre créée, il affiche l'URL passée en argument, mais à ce stade, le principal de l'opération ( cad créer une fenêtre IE ) est déjà fait, et la gestion des codes d'erreur tourne autour de cette création de fenêtre, pas autour de ce qui peut ensuite s'afficher dans la fenêtre en question.

D'ailleurs, imagine l'opération de façon interactive : Quand tu lances ton navigateur à la main, il ne va pas planter parce que l'URL que t'as indiqué en page de démarrage n'est pas disponible. Donc ici, c'est pareil.

Pour gérer une indisponibilité de ton site distant, le mieux consiste amha à surveiller l'apparition d'un objet attendu dans la fenêtre d'accueil. Si l'objet attendu n'apparait pas, c'est qu'il y a un soucis quelconque.
► Afficher le texteExemple de boucle d'attente, à compléter...
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

Re: [..] _IECreate et les erreurs

#3

Message par Laddy »

Bonjour sksbir
merci pour ton éclaircissement, je pensai que IECreate, crée la fenêtre et gérer en meme temps le contenu.

Ma question sera la suivante, quel est l'objet que je peux attendre commune à toutes pages ?
Et qu'est ce que tu appelles objet ?
Avatar du membre
sksbir
Niveau 7
Niveau 7
Messages : 384
Enregistré le : lun. 26 oct. 2009 17:57
Localisation : Lyon
Status : Hors ligne

Re: [..] _IECreate et les erreurs

#4

Message par sksbir »

Laddy a écrit :Bonjour sksbir
merci pour ton éclaircissement, je pensai que IECreate, crée la fenêtre et gérer en meme temps le contenu.
Ma question sera la suivante, quel est l'objet que je peux attendre commune à toutes pages ?
Et qu'est ce que tu appelles objet ?
Je ne suis pas expert dans l'interface COM avec IE hein, j'ai commencé tout juste il y a une semaine ;)
D'ailleurs, j'ai un peu raconté ma vie de débutant ici : [R] IE.au3 : exploiter les composants d'une page...

Tu ne peux pas attendre d'objet commun à "toutes" les pages qui existent sur internet. Il n'y en a pas.

Par contre, il y a peut-être un objet commun à toutes les pages que toi, tu veux ouvrir. Sinon, tu te fais un tableau à 2 dimensions, avec une référence d'objet à surveiller en face de chaque URL.

Exemple d'objet : sur la page d'accueil google.fr, il y a un objet "Btng" .
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

Re: [..] _IECreate et les erreurs

#5

Message par Laddy »

Re,
je vois... c'est un compliqué.... :?
je crois que je vais proposer un seul lien et c'est tout....
Avatar du membre
sksbir
Niveau 7
Niveau 7
Messages : 384
Enregistré le : lun. 26 oct. 2009 17:57
Localisation : Lyon
Status : Hors ligne

Re: [..] _IECreate et les erreurs

#6

Message par sksbir »

Laddy a écrit :Re,
je vois... c'est un compliqué.... :?
je crois que je vais proposer un seul lien et c'est tout....
Le plus compliqué, c'est de partir à la pêche aux composants de la page WEB avec laquelle tu veux interagir. Et pour ça, j'ai pas trouvé mieux que le code source et l'utilitaire Modiv2.

En fait, tu veux faire quoi au juste ?
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

Re: [..] _IECreate et les erreurs

#7

Message par Laddy »

Je souhaitai que lorsque l on clique sur mon image, il ouvre le 1er lien, et si le site ne répondait pas qu'il ouvre le second lien, et si ça échouait aussi , il ouvrait une messagebox.

Je me vois mal checker une 60aine de pages web à la recherche du bon objet... :cry:
Avatar du membre
sksbir
Niveau 7
Niveau 7
Messages : 384
Enregistré le : lun. 26 oct. 2009 17:57
Localisation : Lyon
Status : Hors ligne

Re: [..] _IECreate et les erreurs

#8

Message par sksbir »

Laddy a écrit :Je souhaitai que lorsque l on clique sur mon image, il ouvre le 1er lien, et si le site ne répondait pas qu'il ouvre le second lien, et si ça échouait aussi , il ouvrait une messagebox.
Je me vois mal checker une 60aine de pages web à la recherche du bon objet... :cry:
mais non, pas du tout :shock:

Tu ouvres ton 1er lien avec _iecreate, tu vérifies que l'objet ou l'item trucmuche de ta page arrive. Si il n'est pas là au bout de 10secondes, alors tu envoies un _IENavigate() avec le 2eme lien, et tu vérifies que l'objet ou l'item trucmuche2 arrive, si il n'est pas là au bout de 10secondes, alors tu envoies ta msgbox.

Pour trouver ce qui existe sur tes pages ( le vrai nom de trucmuche et trucmuche2), il te suffit d'analyser le code source de tes pages. ça te fait 2 objets à trouver. Pas 60...
Il suffit qu'UN seul objet de ta page existe pour en déduire que toute la page est chargée.. A toi de choisir l'objet qui se charge en dernier
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

Re: [..] _IECreate et les erreurs

#9

Message par Laddy »

A mon avis je ne comprend pas ce que tu me dis désolé... mais trouver l objet qui se charge en dernier sur une page web je ne vois pas comment faire. Mon exemple est sur deux liens mais mon programme en comportent beaucoup plus et des pages différentes.

Donc je me vois pas mal regarder chaque page web pour trouver le bon objet qui se charge en dernier pour arriver à mon résultat.
Je n'ai pas le niveau pour le moment pour gérer autant compliqué.
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] _IECreate et les erreurs

#10

Message par GaRydelaMer »

Bonjour


dans l'aide je trouve la fonction _IELoadWait
_IELoadWait ( ByRef $o_object [, $i_delay = 0 [, $i_timeout = -1]] )

Les arguments:
l'objet $o_object obtenu avec _IE_Create() mettre le 4ème paramètre à 0 $f_wait
$i_delay délai avant de vérifier le status
$i_timeout délai avant expiration de la fonction par défaut 5mn

Les retours avec @Error
0 ($_IEStatus_Success) = No Error
1 ($_IEStatus_GeneralError) = General Error
3 ($_IEStatus_InvalidDataType) = Invalid Data Type
4 ($_IEStatus_InvalidObjectType) = Invalid Object Type
6 ($_IEStatus_LoadWaitTimeout) = Load Wait Timeout
8 ($_IEStatus_AccessIsDenied) = Access Is Denied
9 ($_IEStatus_ClientDisconnected) = Client Disconnected

Code : Tout sélectionner

#include <IE.au3>
$oIE = _IECreate ("www.autoitscript.com", 0, 1, 0, 1); Attach = 0 je suppose que tu l'as dans un GUI, Visible, Retour immédiat pour être gérer par IELoadWait, donne le focus à la fenêtre
_IELoadWait ($oIE, 20, 30 * 1000); 20 ms et attendre 30 secondes
If @Error Then
   ; Gestion des erreurs
EndIf
 
EDIT:

Autre idée regarde la doc et l'exemple de #include <IE.au3>
_IEErrorHandlerRegister ( [$s_functionName = "__IEInternalErrorHandler"] )
Pour utiliser un fonction perso pour la gestion des erreurs de l'objet COM IE.
Avatar du membre
sksbir
Niveau 7
Niveau 7
Messages : 384
Enregistré le : lun. 26 oct. 2009 17:57
Localisation : Lyon
Status : Hors ligne

Re: [..] _IECreate et les erreurs

#11

Message par sksbir »

En attendant, tu devrais déjà essayer d'utiliser _ieloadwait et _ieloadwaittimeout, ça permettra au moins de gérer un chargement trop long.
[edit] grilled... et même plus que ça apparemment :D
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

Re: [..] _IECreate et les erreurs

#12

Message par Laddy »

J'ai tenté de faire ça, mais je ne suis vraiment pas sûr de ce que je fais

Code : Tout sélectionner

#include <GUIConstantsEx.au3>
#include <IE.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Global $tut01[2]
$tut01[0] = "hXXp://www.bibou0007.com/t3146-tuto-de-antivir-9-fr"
$tut01[1] = "http://www.donnemoilinfo.com/tuto/AntiVir/"

Global $Form1_1 = GUICreate("PIC & IE", 200, 100, -1, 1)
Global $Pic39 = GUICtrlCreatePic(@DesktopDir & "\avira.gif", 10, 10, 16, 16, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
GUISetState(@SW_SHOW)
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Pic39
            For $i = 0 To Ubound($tut01)-1
                $oIE = _IECreate($tut01[0], 0, 1, 0, 1)
                _IELoadWait($oIE, 20, 30 * 1000); 20 ms et attendre 30 secondes
                If @error = 0 Then
                    ExitLoop
                    If @error <> 0 Then
                        $oIE2 = _IECreate($tut01[1], 0, 1, 0, 1)
                        _IELoadWait($oIE2, 20, 30 * 1000); 20 ms et attendre 30 secondes
                        If @error = 0 Then
                            ExitLoop

                            If @error <> 0 Then
                                MsgBox(48, "Indisponible", "Tutoriels indisponibles")

                            EndIf
                        EndIf
                    EndIf
                EndIf
            Next

    EndSwitch
WEnd
 
ça ne fonctionne pas.
Modifié en dernier par Laddy le mar. 15 mars 2011 15:24, modifié 1 fois.
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] _IECreate et les erreurs

#13

Message par GaRydelaMer »

Re,

2 choses tu utilises très mal les tableaux dans ta boucle For !! (voir Ubound() )

La boucle For justement ne sert à rien

Tu cliques sur ton image => Tu ouvres IE a la page $tut01[0]
Si c'est bon Bien c'est Bon tu fais rien de plus
Si c'est pas bon, tu recharges une nouvelle page dans le même Objet $oIE, avec IE_Navigate()
_IENavigate ( ByRef $o_object, $s_url [, $f_wait = 1] )
$f_wait à 0
et tu re testes avec IELoadWait()
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

Re: [..] _IECreate et les erreurs

#14

Message par Laddy »

GaRydelaMer , j'ai rien compris :oops:
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] _IECreate et les erreurs

#15

Message par GaRydelaMer »

Bon je retente

$oIE et un objet, qui te sers à manipuler (en gros) des pages Web.

Donc tu créer, 1 objet, tu navigues vers ton tuto ($tut01[0] c'est toi qui as stocker dans 1 tableau l'adresse de la page)

Cet objet va donc 1 tenter d'accéder à la page, la tu vas devoir intercepter si oui ou non il y a une erreur.

Si oui
OK
Si Non
tu vas dire à ton objet $oIE toujours le même de changer de page $tut01[1] et la tu te retrouves au même niveau que au dessus:
Vérifier si tu as accès à la page.

Donc pas besoin de ta boucle For.

2/ For $i = 0 To $tuto01, n a aucun sens, c'était ma remarque sur les tableaux, que tu semble avoir corriger depuis.


DONC:
Erreur car tu utilise 2 objet $oIE1 et $oIE2, les variables sont pas toutes déclarer en début de projet, faire une boucle pour rien et mauvaise imbrication des IF dans le test de @Error dans la 2ème partie.
Tu sais pas pourquoi l'erreur à été renvoyé.

Opt("MustDeclareVars", 1)
A ajouter à tout tes fichier AU3, ca t'éviteras pas mal d'erreur difficile à trouver en mélangeant les niveaux Global, Local.
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

Re: [..] _IECreate et les erreurs

#16

Message par Laddy »

Re,
J'ai tenté ceci :

- suppression du for
- if @error

Code : Tout sélectionner

#include <GUIConstantsEx.au3>
#include <IE.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Opt("MustDeclareVars", 1)
Global $nMsg, $oIE
Global $tut01[2]
$tut01[0] = "hXXp://www.bibou0007.com/t3146-tuto-de-antivir-9-fr"
$tut01[1] = "http://www.donnemoilinfo.com/tuto/AntiVir/"

Global $Form1_1 = GUICreate("PIC & IE", 200, 100, -1, 1)
Global $Pic39 = GUICtrlCreatePic(@DesktopDir & "\avira.gif", 10, 10, 16, 16, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
GUISetState(@SW_SHOW)
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Pic39
                $oIE = _IECreate($tut01[0], 0, 1, 0, 1)
                _IENavigate($tut01[0],0)
                _IELoadWait($oIE, 20, 30 * 1000); 20 ms et attendre 30 secondes
                    If @error <> 0 Then
                        $oIE = _IECreate($tut01[1], 0, 1, 0, 1)
                        _IENavigate($tut01[1],0)
                        _IELoadWait($oIE, 20, 30 * 1000); 20 ms et attendre 30 seconde
                            Else
                                MsgBox(48, "Indisponible", "Tutoriels indisponibles")
                            EndIf


    EndSwitch
WEnd
 
J'ai la page web qui s'ouvre, en fait j'aimerai qu'elle s'ouvre uniquement si le lien est ok et si ce n'est pas le cas qu'il passe au suivant.
Mais ça ne fait pas, il ouvre la page web qui est inexacte, et m'affiche la messagebox. :shock:

J'ai ceci dans ma console :
--> IE.au3 V2.4-0 Error from function _IENavigate, $_IEStatus_InvalidDataType
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] _IECreate et les erreurs

#17

Message par GaRydelaMer »

Alors

Si tu lis la doc de IE_Create(), je crois le dernier paramètre permet d'afficher ou non la fenêtre.
Répondre