Quiero desechar un sitio web, pero el problema con ese sitio es el siguiente: el contenido del sitio se carga en 1 segundo, pero el cargador en la barra de navegación siguió cargándose durante 30 a 1 minuto, por lo que mi titiritero desguace siguió esperando que el cargador en la barra de navegación se detuviera. ¿Hay alguna forma de ejecutar window.stop()
después de un cierto tiempo de espera?
const checkBook = async () => { await page.goto(`https://wattpad.com/story/${bookid}`, { waitUntil: 'domcontentloaded', }); const is404 = await page.$('#story-404-wrapper'); if (is404) { socket.emit('error', { message: 'Story not found', }); await browser.close(); return { error: true, }; } storyLastUpdated = await page .$eval( '.table-of-contents__last-updated strong', (ele: any) => ele.textContent, ) .then((date: string) => getDate(date)); };
Podrías desnudar el
waitUntil: 'domcontentloaded',
a favor de un tiempo de espera como se documenta aquí https://github.com/puppeteer/puppeteer/blob/v14.1.0/docs/api.md#pagegotourl-options
o establezca el tiempo de espera en cero y, en su lugar, use uno de los page.waitFor...
como este
await page.waitForTimeout(30000);
Enfoque similar a la respuesta de Marcel. Lo siguiente hará el trabajo:
page.goto(url) await page.waitForTimeout(1000) await page.evaluate(() => window.stop()) // your scraper script goes here await browser.close()
Notas:
page.goto()
NO se espera, por lo que ahorra tiempo en comparación con esperar hasta que DOMContentLoaded
o Load
eventos...goto
, debe asegurarse de que su script pueda comenzar a trabajar con el DOM. Puede usar page.waitForTimeout()
o page.waitForSelector()
.window.stop()
dentro de page.evaluate()
para evitar este tipo de error: Error: Navigation failed because browser has disconnected!