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

waitForNavigation timeout #80

Open
benel opened this issue Oct 4, 2024 · 2 comments
Open

waitForNavigation timeout #80

benel opened this issue Oct 4, 2024 · 2 comments

Comments

@benel
Copy link

benel commented Oct 4, 2024

Bonjour,

Auriez-vous des exemples de cas qui fonctionnent avec waitForNavigation. Sur quasiment tous les sites que j'ai testés et avec les 4 valeurs possibles, j'obtiens à chaque fois un timeout.

url.yaml

- url: 'https://collectif.greenit.fr/'
  waitForNavigation: 'networkidle2'
greenit analyse url.yaml            
No output format specified, defaulting to xlsx based on output file name.
 Analysing       [=======               ] 33%     Remaining: 0.0s     Time: 0.0Error while analyzing URL https://collectif.greenit.fr/ :  TimeoutError: Navigation timeout of 180000 ms exceeded
    at new Deferred (/Users/benel/Documents/Formalisations/Code JavaScript/GreenIT-Analysis-cli/node_modules/puppeteer-core/lib/cjs/puppeteer/util/Deferred.js:26:34)
    at Deferred.create (/Users/benel/Documents/Formalisations/Code JavaScript/GreenIT-Analysis-cli/node_modules/puppeteer-core/lib/cjs/puppeteer/util/Deferred.js:68:16)
    at new LifecycleWatcher (/Users/benel/Documents/Formalisations/Code JavaScript/GreenIT-Analysis-cli/node_modules/puppeteer-core/lib/cjs/puppeteer/cdp/LifecycleWatcher.js:75:60)
    at CdpFrame.waitForNavigation (/Users/benel/Documents/Formalisations/Code JavaScript/GreenIT-Analysis-cli/node_modules/puppeteer-core/lib/cjs/puppeteer/cdp/Frame.js:188:29)
    at CdpFrame.<anonymous> (/Users/benel/Documents/Formalisations/Code JavaScript/GreenIT-Analysis-cli/node_modules/puppeteer-core/lib/cjs/puppeteer/util/decorators.js:108:27)
    at CdpPage.waitForNavigation (/Users/benel/Documents/Formalisations/Code JavaScript/GreenIT-Analysis-cli/node_modules/puppeteer-core/lib/cjs/puppeteer/api/Page.js:633:43)
    at waitPageLoading (/Users/benel/Documents/Formalisations/Code JavaScript/GreenIT-Analysis-cli/cli-core/analysis.js:75:20)
    at doFirstAction (/Users/benel/Documents/Formalisations/Code JavaScript/GreenIT-Analysis-cli/cli-core/analysis.js:188:15)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async startActions (/Users/benel/Documents/Formalisations/Code JavaScript/GreenIT-Analysis-cli/cli-core/analysis.js:104:5)
    at async analyseScenario (/Users/benel/Documents/Formalisations/Code JavaScript/GreenIT-Analysis-cli/cli-core/analysis.js:42:21)
    at async createJsonReports (/Users/benel/Documents/Formalisations/Code JavaScript/GreenIT-Analysis-cli/cli-core/analysis.js:403:19)
    at async analyse_core (/Users/benel/Documents/Formalisations/Code JavaScript/GreenIT-Analysis-cli/commands/analyse.js:81:19)

Merci d'avance.

@jpreisner
Copy link
Collaborator

jpreisner commented Oct 7, 2024

Hello @benel,

Merci pour la création de l'issue. Je constate effectivement la même chose. Je suppose que c'est lié à une montée de version de Puppeteer.

D'après leur doc, il faudrait encapsuler l'action + la condition d'attente dans un bloc Promise.all : https://github.com/puppeteer/puppeteer/blob/puppeteer-v21.5.2/docs/api/puppeteer.frame.waitfornavigation.md

Par contre, je vois qu'ils mettent à disposition une nouvelle fonction waitForNetworkIdle qui fonctionne après test : https://github.com/puppeteer/puppeteer/blob/puppeteer-v21.5.2/docs/api/puppeteer.page.waitfornetworkidle.md

Je proposerai bien d'utiliser cette fonction, et de ne laisser plus que 3 choix possibles dans GreenIT-Analysis :

  • waitForSelector
  • waitForXPath
  • waitForNetworkIdle (on attend qu'il n'y ait plus de requêtes http pendant 500ms, équivalent du networkidle0)

Parmi tes cas d'usage, vois-tu un besoin d'utiliser les options networkidle2, ou encore load et domcontentloaded ?

@benel
Copy link
Author

benel commented Oct 10, 2024

Merci de ta réponse @jpreisner.
Les propositions que tu esquisses me semblent aller dans le bon sens.

Effectivement, personnellement, je n'ai pas trop ressenti le besoin jusqu'à maintenant de waitForNavigation: load(qui de toute manière est le comportement par défaut si j'ai bien compris) ou waitForNavigation: domcontentloaded.

Concernant waitForNavigation: networkIdle2, j'imagine que ça a été créé pour les sites qui font du "active polling" avec une fréquence de moins de 500 ms (pour un canal de discussion, un outil d'édition collaborative, etc.). Par ailleurs je ne sais pas comment se comportent waitForNavigation: networkIdle0 ou waitForNetworkIdle avec du "long polling" (quand on laisse la connexion ouverte pour recevoir des notifications du serveur). Si c'est considéré comme de l'activité réseau, il y a peut-être besoin de waitForNavigation: networkIdle2. Il faudrait faire des tests...

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