我有以下函数,它单击带有“rel=_nofollow”属性的链接,等待新页面选项卡打开,然后加载内容,但有时页面不会加载,并且不会循环到下一页,脚本挂起。
如何在这里设置超时?
let clickAndWaitForTarget = async (clickSelector, page, browser) => {
const pageTarget = page.target();
await page.click(clickSelector);
const newTarget = await browser.waitForTarget(
target => target.opener() === pageTarget
);
const newPage = await newTarget.page(); //get the page object
await page.waitFor(10000);
return newPage;
};
我认为如果我能让它超时,我就可以返回 false 或其他内容来检查主代码是否成功或失败?
newpage = await clickAndWaitForTarget("a.someSelector", page, browser);
if(newpage){
var url = await newpage.url();
...
提前致谢!
编辑:我使用的是 Puppeteer 版本 2.0.0
最佳答案
waitForTarget
有一个超时选项。默认值为 30 秒,也许这对您来说已经太多了。
你可以这样做:
let clickAndWaitForTarget = async (clickSelector, page, browser) => {
const pageTarget = page.target();
await page.click(clickSelector);
try {
const newTarget = await browser.waitForTarget(
target => target.opener() === pageTarget,
{ timeout: 3000} /*3 seconds instead*/
);
const newPage = await newTarget.page(); //get the page object
await page.waitFor(10000);
return newPage;
} catch {
return null;
}
};
关于javascript - WaitForTarget 上的 Puppeteer 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58851964/