在 puppeteer 中的特定时间后如何 运行 window.stop
How to run window.stop after certain time in puppeteer
我想对一个站点进行网络抓取,但该站点的问题是,站点中的内容在 1 秒内加载,但导航栏中的加载器持续加载 30 到 1 分钟,所以我的 puppeteer 抓取器一直在等待加载器导航栏停止?
有没有办法在一定的超时后运行window.stop()
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));
};
你可以去掉
waitUntil: 'domcontentloaded',
支持此处记录的超时 https://github.com/puppeteer/puppeteer/blob/v14.1.0/docs/api.md#pagegotourl-options
或将超时设置为零,而是像这样使用 page.waitFor...
之一
await page.waitForTimeout(30000);
与 Marcel 的回答类似的方法。以下将完成这项工作:
page.goto(url)
await page.waitForTimeout(1000)
await page.evaluate(() => window.stop())
// your scraper script goes here
await browser.close()
备注:
page.goto()
未等待,因此与等待 DOMContentLoaded
或 Load
事件相比,您可以节省时间...
- ...如果没有等待
goto
,您需要确保您的脚本可以使用 DOM 开始工作。您可以使用 page.waitForTimeout()
or page.waitForSelector()
.
- 你必须在
page.evaluate()
内执行window.stop()
,这样你就可以避免这种错误:Error: Navigation failed because browser has disconnected!
我想对一个站点进行网络抓取,但该站点的问题是,站点中的内容在 1 秒内加载,但导航栏中的加载器持续加载 30 到 1 分钟,所以我的 puppeteer 抓取器一直在等待加载器导航栏停止?
有没有办法在一定的超时后运行window.stop()
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));
};
你可以去掉
waitUntil: 'domcontentloaded',
支持此处记录的超时 https://github.com/puppeteer/puppeteer/blob/v14.1.0/docs/api.md#pagegotourl-options
或将超时设置为零,而是像这样使用 page.waitFor...
之一
await page.waitForTimeout(30000);
与 Marcel 的回答类似的方法。以下将完成这项工作:
page.goto(url)
await page.waitForTimeout(1000)
await page.evaluate(() => window.stop())
// your scraper script goes here
await browser.close()
备注:
page.goto()
未等待,因此与等待DOMContentLoaded
或Load
事件相比,您可以节省时间...- ...如果没有等待
goto
,您需要确保您的脚本可以使用 DOM 开始工作。您可以使用page.waitForTimeout()
orpage.waitForSelector()
. - 你必须在
page.evaluate()
内执行window.stop()
,这样你就可以避免这种错误:Error: Navigation failed because browser has disconnected!