Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Aucun résultat #10

Closed
Jeoffreybauvin opened this issue Apr 15, 2021 · 17 comments
Closed

Aucun résultat #10

Jeoffreybauvin opened this issue Apr 15, 2021 · 17 comments

Comments

@Jeoffreybauvin
Copy link

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 :

image

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 :( ?

@ssenart
Copy link
Owner

ssenart commented Apr 15, 2021

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

@Jeoffreybauvin
Copy link
Author

Jeoffreybauvin commented Apr 16, 2021

Bonsoir @ssenart ,

Voici en PJ le fichier pygazpar.log

pygazpar.log

Je te confirme qu'il n'y avait pas de screenshot dans ce dossier.

@ssenart
Copy link
Owner

ssenart commented Apr 17, 2021

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:

image

  1. Idéalement, utilise le même navigateur que celui utilisé par PyGazpar.
  2. Logue-toi sur le site GrDF et va dans la rubrique 'Suivi de consommation' à partir la page d'accueil.
  3. Clique sur l'onglet Consommations : (1) sur le screenshot.
  4. Ensuite, sélectionne la consommation par jour : (2) sur le screenshot.
  5. 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é ?

@Jeoffreybauvin
Copy link
Author

Hello @ssenart ,

Ouaip, je récupère bien un fichier Consommations gaz_Maison_21122020_15042021.xlsx, avec toutes les infos nécessaires.

@ssenart
Copy link
Owner

ssenart commented Apr 18, 2021

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

@Jeoffreybauvin
Copy link
Author

Salut,

Merci pour le corretif, malheureusement ça ne change rien.

J'ai fait le test via 2 méthodes :

  1. Ubuntu 20.10 (virtualbox), Python 3.8 , Geckodriver 0.29.1 et Firefox 81.0.2+build1-0ubuntu.
  2. 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

@ssenart
Copy link
Owner

ssenart commented Apr 18, 2021

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.

@Jeoffreybauvin
Copy link
Author

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.

pygazpar.log

@ssenart
Copy link
Owner

ssenart commented Apr 18, 2021

Merci.

  1. 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é).

  2. 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 ?

@Jeoffreybauvin
Copy link
Author

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 ?

@ssenart
Copy link
Owner

ssenart commented Apr 18, 2021

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.

@Jeoffreybauvin
Copy link
Author

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

@Jeoffreybauvin
Copy link
Author

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.

@ssenart
Copy link
Owner

ssenart commented Apr 18, 2021

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é) ?

@Jeoffreybauvin
Copy link
Author

Jeoffreybauvin commented Apr 18, 2021

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 :)

@ssenart
Copy link
Owner

ssenart commented Apr 20, 2021

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

@Jeoffreybauvin
Copy link
Author

Salut @ssenart ,

Je teste ça asap, grosse semaine de mon coté.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants