Aucun résultat
Closed this issue · 17 comments
Bonsoir,
Je tente de faire marcher ce package Python.
Je fais mon test sur mon Ubuntu 20.10, Python 3.8 , Geckodriver 0.29.1 et Firefox 81.0.2+build1-0ubuntu1.
Lorsque je lance le script, il tourne assez longtemps, pour au final ne rien renvoyer :
(venv) jeo@bud:~/dev$ pygazpar -u 'pouet@gmail.com' -p 'pouet' -w geckodriver -s 30 -t tmp/ -l 0
[]
Je semble bien avoir des consommations sur mon compte GRDF :
Les logs de geckodriver :
1618521671214 geckodriver INFO Listening on 127.0.0.1:57303
1618521671227 mozrunner::runner INFO Running command: "/usr/bin/firefox" "--marionette" "-headless" "-foreground" "-no-remote" "-profile" "/tmp/rust_mozprofileL5Xmt8"
*** You are running in headless mode.
console.error: SearchCache: "_readCacheFile: Error reading cache file:" (new Error("", "(unknown module)"))
1618521680829 Marionette INFO Listening on port 38081
1618521680904 Marionette WARN TLS certificate errors will be ignored for this session
JavaScript error: resource://gre/modules/URIFixup.jsm, line 271: NS_ERROR_FAILURE: Should pass a non-null uri
1618521693174 Marionette WARN TimedPromise timed out after 500 ms: stacktrace:
TimedPromise/<@chrome://marionette/content/sync.js:245:13
TimedPromise@chrome://marionette/content/sync.js:230:10
interaction.flushEventLoop@chrome://marionette/content/interaction.js:416:10
webdriverClickElement@chrome://marionette/content/interaction.js:182:31
(firefox:18593): GLib-GObject-CRITICAL **: 23:24:10.655: g_object_get: assertion 'G_IS_OBJECT (object)' failed
1618521884487 Marionette INFO Stopped listening on port 38081
Une idée :( ?
Bonsoir,
Peux-tu envoyer le fichier de log pygazpar.log dans le dossier tmp/. Il me dira plus de choses que celui du geckodriver. Et est-ce qu'il y a une image error_screenshot.png dans ce même dossier ?
Merci
Stephane
Bonsoir @ssenart ,
Voici en PJ le fichier pygazpar.log
Je te confirme qu'il n'y avait pas de screenshot dans ce dossier.
Hello,
D'après la log, le programme n'a téléchargé aucun fichier de données dans le répertoire tmp/ après avoir cliqué sur le bouton 'Télécharger'.
En allant sur le site GrDF, peux-tu essayer, manuellement, de télécharger ce même fichier de données ?
En t'aidant du screenshot ci-joint:
- Idéalement, utilise le même navigateur que celui utilisé par PyGazpar.
- Logue-toi sur le site GrDF et va dans la rubrique 'Suivi de consommation' à partir la page d'accueil.
- Clique sur l'onglet Consommations : (1) sur le screenshot.
- Ensuite, sélectionne la consommation par jour : (2) sur le screenshot.
- Enfin, clique sur le bouton 'Télécharger' : (3) sur le screenshot.
Est-ce que tu récupères bien un fichier de données ?
Peux-tu me donner le nom exacte du fichier téléchargé ?
Hello @ssenart ,
Ouaip, je récupère bien un fichier Consommations gaz_Maison_21122020_15042021.xlsx, avec toutes les infos nécessaires.
Salut,
Je viens de corriger un truc qui pourrait fixer ton problème.
La version avec le fix est la 0.1.26.
Tiens-moi au courant,
Stéphane
Salut,
Merci pour le corretif, malheureusement ça ne change rien.
J'ai fait le test via 2 méthodes :
- Ubuntu 20.10 (virtualbox), Python 3.8 , Geckodriver 0.29.1 et Firefox 81.0.2+build1-0ubuntu.
- Debian WSL2 (Windows) avec Python 3.8, Geckodriver 0.29.1 et Firefox ESR 78.9.0esr-1~deb10u1
Ci-joint le fichier pygazpar.log
La log que tu as jointe ne correspond pas à la version 0.1.26.
Depuis la version 0.1.26, la log doit commencer par :
2021-04-18 11:41:09,149 INFO [root] PyGazpar 0.1.26
2021-04-18 11:41:09,150 INFO [root] --webdriver /root/geckodriver
2021-04-18 11:41:09,150 INFO [root] --wait_time 30
2021-04-18 11:41:09,150 INFO [root] --tmpdir /tmp
2021-04-18 11:41:09,150 INFO [root] --lastNRows 0
2021-04-18 11:41:09,150 INFO [root] --headfull False
2021-04-18 11:41:09,150 DEBUG [pygazpar.client] Start updating the data...
...
As-tu bien fait la mise à jour vers la 0.1.26. La commande est la suivante:
pip3 install pygazpar --upgrade
Et pour vérifier la version installée:
pip3 list | grep pygazpar
doit retourner:
pygazpar 0.1.26
Pour information, j'ai réussi à reproduire ton problème sur une Ubuntu 20.10 (docker), Python 3.8, Geckodriver 0.29.1 et Firefox 87.0 avec PyGazpar 0.1.25 et vérifier que le fix 0.1.26 corrige dans cette même configuration.
Oh désolé, j'avais bien fait la mise a jour sur mon WSL2, mais pas sur Ubuntu. Je viens de tester, et j'ai le meme souci, meme avec la 0.1.26. Voici le fichier de logs en pj.
Merci.
-
Peux-tu vérifier si le fichier Excel de consommation se télécharge bien, mais dans le dossier Download (ou Téléchargement) par défaut de ton compte plutôt que dans le dossier tmpdir comme attendu (c'est ce que j'avais observé).
-
Dans la version 0.1.26, j'ai rajouté un nouveau paramètre (--headfull) qui permet d'ouvrir et voir la progression dans Firefox. En l'utilisant, vois-tu quelque chose de particulier, notamment au moment de télécharger le fichier ?
Alors en effet, je te confirme que le xslx se retrouve dans le dossier Téléchargements de mon home... Mais le script me renvoie toujours un tableau vide.
Du coup si le xlsx est bien récupéré, ce serait pas un souci de parsing ?
Je ne crois pas.
Le programme s'attend à récupérer le fichier de données dans le dossier tmpdir et pas ailleurs.
Je dois comprendre pourquoi dans tes environnements, il n'est pas télécharger dans ce dossier.
Je vais essayer de reproduire sur une debian.
Pour te donner un maximum d'infos :
Il s'agit d'une Ubuntu Budgie 20.10 dans Virtualbox.
jeo@bud:~$ dpkg -l | grep firef
ii firefox 87.0+build3-0ubuntu0.20.10.1 amd64 Safe and easy web browser from Mozilla
ii firefox-locale-en 87.0+build3-0ubuntu0.20.10.1 amd64 English language pack for Firefox
ii firefox-locale-fr 87.0+build3-0ubuntu0.20.10.1 amd64 French language pack for Firefox
(venv) jeo@bud:~/dev$ pip list
Package Version
------------- -------
et-xmlfile 1.0.1
jdcal 1.4.1
openpyxl 2.6.3
pip 20.1.1
pkg-resources 0.0.0
pygazpar 0.1.26
selenium 3.141.0
setuptools 44.0.0
urllib3 1.26.4
wheel 0.34.2
Bon sinon, je viens de faire un test avec une image Docker fraichement faite :
FROM python:3.9.4-alpine
RUN apk add firefox
RUN wget https://github.com/mozilla/geckodriver/releases/download/v0.29.1/geckodriver-v0.29.1-linux64.tar.gz \
&& tar -zxvf geckodriver-v0.29.1-linux64.tar.gz -C /usr/bin \
&& rm geckodriver-v0.29.1-linux64.tar.gz
RUN pip install pygazpar
Le lancement du script dans le container renvoie bien ce qu'il faut, donc ça marche. Reste juste à trouver pourquoi ça pète dans le scénario précédent.
Merci d'avoir partager cette information.
- Sur Ubuntu, je suis exactement avec les mêmes versions que toi mais dans un docker tout frais.
Mon docker-compose.yml:
version: "2"
services:
ubuntu:
image: ubuntu:20.10
container_name: ubuntu
restart: unless-stopped
network_mode: bridge
entrypoint: tail -f /dev/null
Et ça fonctionne très bien.
- Sur Debian, ça ne fonctionne pas, et vu les erreurs dans la log, je pense à un problème de compatibilité Geckodriver 0.29.1 avec Firefox-ESR 78.9.0 trop ancien. J'ai déjà eu ça sur Alpine Linux avevc Firefox-ESR.
Traceback (most recent call last):
File "/root/TestPyGazpar/.venv/lib/python3.7/site-packages/pygazpar/webdriverwrapper.py", line 103, in find_element_by_xpath
element = self.__driver.find_element_by_xpath(xpath)
File "/root/TestPyGazpar/.venv/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 394, in find_element_by_xpath
return self.find_element(by=By.XPATH, value=xpath)
File "/root/TestPyGazpar/.venv/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 978, in find_element
'value': value})['value']
File "/root/TestPyGazpar/.venv/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "/root/TestPyGazpar/.venv/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: Failed to decode response from marionette
As-tu ta log Debian pour confirmer qu'on a tous les deux le même problème (compatibilité) ?
Pour Ubuntu, ok, même si je ne comprends pas pourquoi... Pour Debian, ou retrouves-tu ces messages d'erreur ? De mon coté impossible de les avoir.
De toute façon mon but est de faire tourner ça dans une image docker. Quel est le combo gagnant de ton coté ?
Je tente ma chance avec instrumentisto/geckodriver:latest, mais je me retrouve avec des erreurs :
root@bc99c44f7313:/tmp# cat pygazpar_geckodriver.log
1618767446822 geckodriver INFO Listening on 127.0.0.1:54079
1618767446828 mozrunner::runner INFO Running command: "/usr/bin/firefox" "--marionette" "-headless" "-foreground" "-no-remote" "-profile" "/tmp/rust_mozprofilec5odUR"
*** You are running in headless mode.
[GFX1-]: glxtest: libpci missing
[GFX1-]: glxtest: libEGL missing
[GFX1-]: glxtest: libGL.so.1 missing
[GFX1-]: glxtest: libEGL missing
[GFX1-]: No GPUs detected via PCI
(/opt/firefox/firefox-bin:81): GLib-GObject-CRITICAL **: 17:37:27.310: g_object_set: assertion 'G_IS_OBJECT (object)' failed
(/opt/firefox/firefox-bin:106): GLib-GObject-CRITICAL **: 17:37:27.363: g_object_set: assertion 'G_IS_OBJECT (object)' failed
console.warn: SearchSettings: "get: No settings file exists, new profile?" (new Error("", "(unknown module)"))
1618767448149 Marionette INFO Listening on port 36753
1618767448247 Marionette WARN TLS certificate errors will be ignored for this session
(/opt/firefox/firefox-bin:179): GLib-GObject-CRITICAL **: 17:37:28.365: g_object_set: assertion 'G_IS_OBJECT (object)' failed
1618767602267 Marionette INFO Stopped listening on port 36753
pygazpar.webdriverwrapper (WARNING): find_element_by_xpath('//div[2]/div[2]/div/a/div'): Welcome page: 'Acceder' button of 'Suivi de consommation' -> Not found
Traceback (most recent call last):
File "/usr/local/lib/python3.7/dist-packages/pygazpar/webdriverwrapper.py", line 103, in find_element_by_xpath
element = self.__driver.find_element_by_xpath(xpath)
File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 394, in find_element_by_xpath
return self.find_element(by=By.XPATH, value=xpath)
File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 978, in find_element
'value': value})['value']
File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: //div[2]/div[2]/div/a/div
Edit : je n'ai rien dit, l'image instrumentisto/geckodriver:latest semble bien fonctionner :)
Salut, il y a bien un problème lorsqu'on l'on passe un chemin relative à tmpdir. Celui-ci est envoyé tel quel au geckodriver qui lui ne prend que des chemins absolus. J'arrive bien à le reproduire:
- tmpdir = chemin relatif => le téléchargement du fichier de données se fait dans le dossier 'Download' par défaut de l'utilisateur.
- tmpdir = chemin absolu => le téléchargement du fichier de données se fait bien dans le dossier tmpdir.
J'ai corrigé ce défaut dans la version 0.1.27.
Peux-tu me confirmer si c'est bien le même problème que tu as rencontré ?
Merci,
Stéphane
Salut @ssenart ,
Je teste ça asap, grosse semaine de mon coté.