Apparemment rien à voir avec Selenium mais toujours ce message d'erreur...j'ai l'impression qu'il manque une extension liée au webdriver.xpi renommé en firefoxdriver.xpiQuel est le module qui n'a pas pu être vérifié ?
Apparemment rien à voir avec Selenium mais toujours ce message d'erreur...j'ai l'impression qu'il manque une extension liée au webdriver.xpi renommé en firefoxdriver.xpiQuel est le module qui n'a pas pu être vérifié ?
voilà ce que j'ai dans les extensions de Firefox :
Le message en haut certaines extensions n'ont pas pu être vérifiées n'est pas important dans mon cas car cela concerne le HP smart web printing que je n'utilise pas.
Attention il ne faut pas essayer de charger le firefoxdriver.xpi car c'est un module temporaire qui est chargé quand on exécute le code VBA
Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko
J'ai Selenium IDE et Selenium IDE VBA/VBS Formatters.
J'ai également téléchargé Selenium IDE : Implicit Wait mais cela ne change rien.
J'avais essayé pour voir vu que ça ne fonctionnait pas mais cela n'a rien changé.Attention il ne faut pas essayer de charger le firefoxdriver.xpi car c'est un module temporaire qui est chargé quand on exécute le code VBA
bon on va essayer autre chose pour voir si ce n'est pas le fait que tu utilises Excel en 64 bits qui pose problème :
est-ce que ce code fonctionne ? (avec Chrome comme navigateur) :
sinon essaie de remplacer Chrome par internet explorer ou edge
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Public Sub CaptureABCBourse() Dim robot As New WebDriver robot.Start "Chrome", "http://www.abcbourse.com/download/historiques.aspx" ' test 1 prendre une copie d'écran robot.Get "/" robot.TakeScreenshot.SaveAs (ActiveWorkbook.Path + "/CopieEcran.png") robot.Quit End Sub
Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko
oui une copie d'écran est produite.est-ce que ce code fonctionne ?
Cela fonctionne également avec internet explorer.
Avec Edge j'ai un message d'erreur
La page s'ouvre mais la Sub bloque sur
Code : Sélectionner tout - Visualiser dans une fenêtre à part robot.Start "Edge", "http://www.abcbourse.com/download/historiques.aspx"
Pour Edge je ne peux rien te suggérer car je ne suis pas sous windows 10,
il y a aussi un autre driver PhantomJS qui travaille en mode invisible en javascript.
Peux-tu essayer l'autre procédure (celle qui récupère l'historique) avec Chrome comme navigateur ?
Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko
en adaptant la procédure
cela fonctionne (le téléchargement du fichier texte est proposé à l'ouverture).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Dim fxProfile As New ChromeDriver ... driver.Start "chrome", "http://www.abcbourse.com/"
Patrick, ton code Demo3IE11 du post #210 fonctionne au premier lancement uniquement,
au second j'ai toujours l'erreur à cause du résiduel d'IE11 comme Ryu dans son post #216 ! (et certainement David …)
Sinon, à partir du ReadyState Interactive (3) à l'ouverture d'IE son Document est accessible sans gestion d'erreur :
c'est pourquoi je procède ainsi même pour la majorité des pages où je n'ai pas de souci pour obtenir le Readystate à 4 …
La ligne On Error Goto Fin après la détection du bouton sert juste en cas de modification future du code de la page
si une erreur survient afin de ne pas laisser résident IE invisible sinon en l'état actuel ce n'est pas nécessaire …
Sinon pour l'AppActivate, je pensais perdre le focus parfois à cause du Wait mais non,
cela doit être dû à une pause insuffisante. Wait ou Sleep, peu importe …
J'ai remarqué en testant différentes valeurs de Sleep IE11 se ferme bien si le téléchargement n'est pas déclenché …
Donc Patrick a raison : il faut attendre la fin du téléchargement avant de fermer IE11 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 Dim IE As Object, T! Sub Demo4IE11() Const ELT = "ctl00_BodyABC_Button1" Dim Wb As Workbook T = Timer For Each Wb In Workbooks If Wb.Name Like "Cotations*.csv" Then Wb.Close False Next Set IE = CreateObject("InternetExplorer.Application") With IE .Navigate "http://www.abcbourse.com/download/historiques.aspx" While .ReadyState < 3 If Timer - T > 9 Then GoTo Fin Wend While Not IsObject(.Document.all(ELT)) If Timer - T > 9 Then GoTo Fin Wend On Error GoTo Fin With .Document.all .ctl00_BodyABC_strDateDeb.Value = "26/05/2015" .ctl00_BodyABC_strDateFin.Value = "26/05/2016" .ctl00_BodyABC_oneSico.Click .ctl00_BodyABC_txtOneSico.Value = "FR0000120222" .ctl00_BodyABC_dlFormat.Value = "x" .Item(ELT).Click End With On Error GoTo 0 Application.Wait Now + 0.00003 .Visible = True CreateObject("WScript.Shell").SendKeys "{TAB}~" Fin: If Not .Visible Then Beep: T = 0: .Quit: Set IE = Nothing End With End Sub Private Sub Workbook_Deactivate() If ActiveWorkbook.Name Like "Cotations*.csv" And T Then ActiveWorkbook.Saved = True MsgBox "Chargé en " & Format$(Timer - T, "0.000s") T = 0 IE.Quit: Set IE = Nothing End If End SubTest ultime pour le problème du résiduel d'IE11, mettre en commentaire la ligne n°40 (ou utiliser Debug.Print) :
même sans le message, de mon côté IE11 se ferme bien dans les trois secondes suivantes, et du vôtre ?
Ce code fonctionne aussi avec une version antérieure à IE11.
Ligne n°29 : j'ai augmenté la pause car parfois en mode économie d'énergie (I7 2.4Ghz) il peut y avoir un loupé
alors qu'avant avec IE10 il n'en y avait jamais eu …
Edit : comme IE n'est pas fermé dans la procédure appelante mais dans l'évènement, il n'y a plus besoin du Wait après SendKeys !
C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)
Marc,
le code de Patrick (#210) fonctionne sans problème chez moi.
Ton dernier code fonctionne également sans problème...une fois le SendKeys corrigé (il manque le "~") après {TAB}).
Je n'ai pas compris en lisant tes explications pourquoi tu peux te passer du fait de tuer le processus résiduel ?
Cela fonctionne aussi avec un espace à la place de Enter de mon côté (mais j'ai remis dans le code ~ pour Enter) …
En cas de loupé soit la pause n'est pas assez grande soit il y aurait besoin d'AppActivate …
Et l'avantage avec cette version, IE reste ouvert en cas de loupé, l'utilisateur peut quand même valider le téléchargement !
Si IE11 est fermé après l'ouverture effective du fichier téléchargé dans Excel, il n'y a plus de problème de résiduel,
comme Patrick l'avait évoqué …
Par contre avec le code du post #210 de Patrick comme le mien du post #33 j'ai un résiduel avec IE11.
C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)
Pourquoi ne te cales-tu plus sur la recherche du changement de titre "Téléchargement des cotations" concomitant à l'apparition du bandeau pour lancer les SendKeys ?
Là tu es obligé d'utiliser une valeur arbitraire de Application.Wait.
Dans le cas de cette page ça fonctionne (et encore chez toi c'est 3 sec, chez moi c'est plus sûr avec 4) mais il y a des cas je pense que tu ne pourras t'en passer car le laps de temps entre le clic sur le bouton de téléchargement et l'apparition du bandeau peut varier énormément. La question est de savoir si dans ces cas-là l'apparition du bandeau est concomitant au changement de titre de la page.
A l'ouverture de la page son titre est déjà "Téléchargement des cotations pour"
et ne change pas lors de l'apparition du bandeau de téléchargement …
De mon côté en mode Economie d'énergie je peux aussi avoir des loupés à 3
par contre en mode Performances ou sur deux autres ordinateurs (I3 & I5) à fréquence variable 2 est suffisant …
En détectant le bandeau comme Patrick, une pause est quand même nécessaire et quand je réduis la fréquence
alors il faut augmenter la pause. Et cela peut fonctionner dix fois de suite mais pas à la onzième …
C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)
c'est le residuel qui d'éclanche l'erreur au navigatePar contre avec le code du post #210 de Patrick comme le mien du post #33 j'ai un résiduel avec IE11.
chez moi la boucle d'attente sur l'Object fait abstraction car le résiduel fini par partir au bout d'un moment
alors c'est vrai ta boucle sur l'erreur et suppression de l'instance est bien et elle fait gagner du temps sur tout pour des PCs un peu faiblards
mais chez moi pas de soucis même avec le résiduel
bon comme je l'ai dis précédemment ce genre d'astuce qui sont a garder devrait être posté dans la discussion du toto de qwazerty surtout celle la afin qu'elle soit accessible a tous
@Marc
un truc du genre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 function IE_navigable (IE) dim QRY ,T QRY = "SELECT * FROM Win32_Process WHERE Name = 'iexplore.exe'", WMI = "winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2" IE_navigable =true On Error Resume Next T=timer Do If Timer - T > 2 Then Beep: IE_navigate =false Exit function Err.Clear Set IE = CreateObject("InternetExplorer.Application") If Err.Number = &H800704A6 Then For Each IE In GetObject(WMI).ExecQuery(QRY, , 48): IE.Delete_: Next Loop While IE Is Nothing On Error GoTo 0 end function
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 sub test() dim IE as oject if IE_navigable(IE) = true then '.... '............. end sub
mes fichiers dans les contributions:
mail avec CDO en vba et mail avec CDO en vbs dans un HTA
survol des bouton dans userform
prendre un cliché d'un range
si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
et n'oublie pas de voter
hello davido84,
tu dois avoir un souci avec le nom du fichier ou le répertoire où il se trouve ou d'accès au fichier :
j'ai renommé le fichier firefoxdriver.xpi (qui est en fait le webdriver.xpi renommé) en firedriver.xpi qui se trouve chez moi dans le répertoire C:\Users\<nom du user>\AppData\Local\SeleniumBasic et j'ai le même message d'erreur que toi.
J'ai remarqué aussi qu'en rajoutant un bloqueur de publicité dans le profil de Firefox cela accélére le téléchargement (on gagne le temps à aller chercher les différentes publicités qui se trouvent sur la page et qui parfois bloquent un peu).
Pour ceux qui font des essais dans cette discussion avec internet explorer sans selenium : Avez-vous un bloqueur de publicité activé car il me semble que je vois des pubs dans les copies d'écran.
Ami calmant, J.P
Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko
Salut jurassic pork,
je t'ai fait une copie d'écran.
Tu as en haut le chemin du dossier.
Parmi les fichiers .xpi tu as :
- firefoxdriver.old : le fichier initial renommé
- firefoxdriver.xpi : le fichier téléchargé dans ton dernier lien(tu remarqueras d'ailleurs qu'il pèse environ 5 fois moins que l'initial).
A+
Bonsoir les gars
en faisant abstraction de mon partie pour IE je voudrais signaler quand meme que le titre de ce post n'a rien a voir avec firefox
je pense ,pour que tout le monde benificie de l'intervention du travailleur jurassien sur cet addin qui me semble t il devait etre juste une parentheze , soit placé dans une contrib ou un autre post avec un titre évocateur
comme cela on pourra le trouver sans peine, ici il se perd dans un sujet différent finalement
peut etre aussi preciser dans la contrib que cela fonctionne pour IE
le jurassien je t'invite donc a faire ton propre post dans un contrib en renseignant selon ton exeprience tout les astuces
et je me ferait un plaisir de mettre en test poussé ou pas affin de l'enrichir
a mediter
mes fichiers dans les contributions:
mail avec CDO en vba et mail avec CDO en vbs dans un HTA
survol des bouton dans userform
prendre un cliché d'un range
si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
et n'oublie pas de voter
hello,
Patrick a dit :
Le titre du post n'est pas très clair : Piloter la fenêtre window en vba ce qui n'a rien avoir non plus avec Internet exploreren faisant abstraction de mon partie pour IE je voudrais signaler quand meme que le titre de ce post n'a rien a voir avec firefox
Dans le post n° 1 il est dit :
bien sûr ensuite il y a un code avec des commandes pour internet explorer. Mais vu l'énoncé, tout les moyens (navigateurs) sont bons pour réaliser la fonction. C'est vrai que d'avoir deux discussions qui s'entremêlent ce n'est pas terrible et que ma contribution a dérivé sur des problèmes avec seleniumbasic pour davido84.Je souhaite recuperer les valeur de bourse sur abs bourse et au moment ou la macro appuie sur telechargement une fenetre Windows s'ouvre pour cliquer sur télécharger sous et je n'arrive pas a trouver le code malgré toutes mes recherches sur le net, Pouvez vous m'aider, voici mon code
Le principal c'est de répondre à la question posée et de proposer des solutions.
N'importe comment je vais arrêter de parler de seleniumBasic dans ce post ou ailleurs car cela ne pas l'air à jour pour l'instant et n'a pas l'air d'avoir été testé avec du 64 bits.
Pour davido84 (en attendant une nouvelle version de seleniumbasic) : Le problème est peut-être dû à l'O.S (je suis en windows 7) à la version d'Excel ( je suis en 2010 32 bits) ou à l'explorateur ( je suis en Firefox 47.0.1 32 bits). Dans la fiche de seleniumbasic c'est écrit :
Tested environments
Windows 8.1 / Excel 2010 32-bit / Firefox 39 / Selenium IDE 2.9.0
Windows 7 / Excel 2010 32-bit / Firefox 39 / Selenium IDE 2.9.0
Windows XP / Excel 2003 / Firefox 39 / Selenium IDE 2.9.0
Ami calmant, J.P
Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko
bon soir jurassic work
a condition dans ton optique d'installer ff et sélénium ou tout du mois avoir enregistré les dll et autre dans regeditMais vu l'énoncé, tout les moyens (navigateurs) sont bons pour réaliser la fonction
cela dit c'est bien dommage que tu ne veuille pas rédiger ta propre contrib elle évoluerait et ferait peut être même évoluer sélénium
a méditer
loin de moi l'idée de t'arrêter sur ta lancée mais dans une contrib spécial sélénium on y verrait plus clair entre autre y a t il un interface sélénium comme dans FF mais externe etc.....
mes fichiers dans les contributions:
mail avec CDO en vba et mail avec CDO en vbs dans un HTA
survol des bouton dans userform
prendre un cliché d'un range
si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
et n'oublie pas de voter
Récemment un ancien code pilotant IE ne fonctionnait plus : c'était dû à la mise à jour IE11 !
N'ayant rien sous le coude - n'ayant pas été prévenu du souci - je me connecte sur cette discussion
pour en tirer la quintessence, s'agissant aussi d'un téléchargement …
Je ne sais si c'était dû au site du pilotage qui ramait ou aux performances fluctuantes de la connexion Internet
mais une simple pause après le clic sur le bouton de téléchargement n'était guère satisfaisante :
valait mieux détecter l'apparition du bandeau du téléchargement comme le code du post #11 de David.
Mais comme dans cette discussion, seule la touche de tabulation est prise en compte et pas la touche entrée,
il faut attendre un peu pour qu'elle soit prise en compte soit comme dans le code du post #39 de Patrick
soit en effectuant une pause suffisante afin que les deux touches soient acceptées.
Si cette dernière est un peu juste ou si un ralentissement survient,
c'est donc un loupé mais on peut quand même valider manuellement l'ouverture du fichier.
L'idéal serait de détecter quand derrière ce bandeau c'est prêt, une sous-fenêtre gérant les messages …
En attendant, voici mon processus pilotant IE gérant même un éventuel loupé :
• ouvrir la page Web sans attendre son chargement complet mais juste la disponibilité du bouton Télécharger
(c'est plus rapide et pour ceux comme moi qui attendent indéfiniment le statut du chargement complet de la page …)
• paramétrer la page puis cliquer sur le bouton Télécharger
• attendre le bandeau du téléchargement
• effectuer une pause raisonnable avant de simuler les touches tabulation et entrée
• programmer dans un court délai le déclenchement d'une procédure de secours en cas de loupé avant de terminer le processus …
Cette procédure de secours sert juste à simuler la touche entrée
avant de se reprogrammer dans le cas d'un éventuel nouveau loupé …
L'évènement Deactivate du classeur après détection de l'ouverture du fichier téléchargé
annule le déclenchement de la procédure de secours …
Code à copier intégralement dans le module ThisWorkbook :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70 #If Win64 Then Private Declare PtrSafe Function BringWindowToTop Lib "user32" (ByVal hWind&) As Boolean Private Declare PtrSafe Function FindWindowExA& Lib "user32" (ByVal hParent&, ByVal hChild&, ByVal ClassName$, ByVal WindowName$) Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal MilliSeconds&) #Else Private Declare Function BringWindowToTop Lib "user32" (ByVal hWind&) As Boolean Private Declare Function FindWindowExA& Lib "user32" (ByVal hParent&, ByVal hChild&, ByVal ClassName$, ByVal WindowName$) Private Declare Sub Sleep Lib "kernel32" (ByVal MilliSeconds&) #End If Const PROC = "ThisWorkbook.KeyLoop", DS = 0.00002 Dim IE As Object, D As Date, T! Sub Demo5() Const ELT = "ctl00_BodyABC_Button1", SC = 10 Dim Wb As Workbook T = Timer For Each Wb In Workbooks If Wb.Name Like "Cotations*.csv" Then Wb.Close False Next Set IE = CreateObject("InternetExplorer.Application") With IE .Navigate "http://www.abcbourse.com/download/historiques.aspx" While .ReadyState < 3 If Timer - T > SC Then GoTo Fin Wend While Not IsObject(.Document.all(ELT)) If Timer - T > SC Then GoTo Fin Wend On Error GoTo Fin With .Document.all .ctl00_BodyABC_strDateDeb.Value = "26/05/2015" .ctl00_BodyABC_strDateFin.Value = "26/05/2016" .ctl00_BodyABC_oneSico.Click .ctl00_BodyABC_txtOneSico.Value = "FR0000120222" .ctl00_BodyABC_dlFormat.Value = "x" .Item(ELT).Click End With While FindWindowExA(.HWND, 0&, "Frame Notification Bar", vbNullString) = 0 If Timer - T > SC Then GoTo Fin Wend Sleep 800 .Visible = True Sleep 100 CreateObject("WScript.Shell").SendKeys "{TAB}~" D = Now + DS: Application.OnTime D, PROC Fin: If Not .Visible Then T = 0: Beep: .Quit: Set IE = Nothing End With End Sub Private Sub KeyLoop() On Error Resume Next BringWindowToTop IE.HWND If Err.Number Then T = 0: Beep: Set IE = Nothing Else CreateObject("WScript.Shell").SendKeys "~" D = Now + DS: Application.OnTime D, PROC End If End Sub Private Sub Workbook_Deactivate() If ActiveWorkbook.Name Like "Cotations*.csv" And T Then Debug.Print "Demo5 : " & Format$(Timer - T, "0.000s") Application.OnTime D, PROC, , False T = 0: IE.Quit: Set IE = Nothing ActiveWorkbook.Saved = True End If End SubTests effectués sur trois ordinateurs portables de différentes puissances (i3, i5 & i7)
avec différentes configurations d'IE (9 & 11), de Windows (Seven & 8.1) et d'Excel (2003, 2007 & 2010) …
Deux ordinateurs tournent efficacement en réduisant la pause de la ligne de code n°42
mais cette pause à 800 est plus sûre pour un troisième et pourtant ce n'est pas le moins puissant …
Pour affiner sur un ordinateur particulier, démarrer à 200 cette pause.
S'il n'y a pas l'effet flash lors de l'apparition d'IE, augmenter cette pause de 100 …
David, merci de me dire si les déclarations sont correctes pour Excel 64 bits …
C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager