Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

255
Views
Titiritero page.goTo() nunca termina

¿Por qué se cuelga el titiritero page.goto()?

Este es otro ejemplo de que esto sucede ^

Nunca entendí por qué, pero incluso el más simple de los scripts de titiritero no logra pasar goTo()

Tengo el siguiente código:

 const browser = await puppeteer.launch({ executablePath: '/usr/bin/google-chrome-unstable', args: ["--proxy-server='direct://'", '--proxy-bypass-list=*', '--no-sandbox', '--disable-setuid-sandbox'] }); const page = await browser.newPage(); await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'); await page.setDefaultNavigationTimeout(0); log('before nav'); await page.goto('http://www.google.com'); log('waiting nav'); await page.waitForNavigation({ waitUntil: 'networkidle0' }); log('complete'); await browser.close();

la salida es:

 $:# node lib/tests/nav.test.js before nav waiting nav

Nunca registra "completo". Lo he intentado sin proxy-bypass y proxy-server, no-sandbox activado y desactivado. He probado networkidle2 . No se completa. También probé varios sitios web diferentes. Estoy en Puppeteer 4.x y uso el nodo 12.x y npm 6.x.

He investigado el método Promise que la gente sugiere:

 await Promise.All([ page.goto('http://www.google.com'), page.waitForNavigation() ]);

y esto funciona a veces. pero es muy esporádico.

¿El titiritero es realmente este buggy? ¿Hay ALGUNA forma conocida de garantizar la carga de una página antes de realizar acciones? Necesito navegar y completar formularios y hacer clic en botones, etc., por lo que todos los elementos deben estar allí.

También probé la versión waitForSelector() , que tampoco se carga.

Siento que titiritero está fundamentalmente roto. ¿Algunas ideas?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

No estás usando Puppeteer como deberías, por eso se siente con errores, pero es principalmente porque no sabes lo que está pasando en el guión.

Echemos un vistazo.

 await page.goto('http://www.google.com');

esto realmente significa esto:

 await page.goto('http://www.google.com', { waitUntil: 'load' });

Así que vas a una página y esperas hasta que se active el evento de carga. Eso significa que cuando llega detrás de esta línea, no hay otra navegación que esperar. Por lo tanto esta línea:

 await page.waitForNavigation();

esperará para siempre. Eso es lo que describe como "se cuelga".

Entonces, dado que el método page.goTo() ya ofrece formas de especificar cuándo la navegación tuvo éxito (actualmente son: load, domcontentloaded, networkidle0, networkidle2), realmente no necesita usar ningún otro método en combinación con page.goTo() .

Otra situación es cuando hace clic en un botón y espera que suceda algo, como que aparezca una navegación o un selector en la página. Dado que el método page.click() no ofrece las mismas opciones que page.goTo() , a menudo necesitará usar otro método en combinación, así:

 await Promise.all([ page.waitForNavigation(), page.click(selector) ]);

o esperar a la navegación y algún selector:

 await Promise.all([ page.waitForNavigation({ waitUntil: 'networkidle0' }), page.waitForSelector(selector), fbButton.click() ]);

Si te apegas a estos patrones, no creo que sientas que Titiritero tiene errores. Es solo que es una herramienta de bajo nivel, por lo que necesita escribir más código que en algún otro marco como WebdriverIO y similares.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!