繁体   English   中英

Puppeteer 页面不想在无头模式下完全加载

[英]Puppeteer page doesn't want to load totally in headless mode

这是我的代码:

// Open the browser
let browser = await puppeteer.launch({
    args: ["--no-sandbox"]
});
let page = await browser.newPage();

navPromise = page.waitForSelector('#js_boite_reception').then(() => {
    console.log('received');
});
await page.goto(entMessagesURL);
await navPromise;

// Wait 10 seconds, to be sure that is not because my connection is slow (it's not)
logger.log(`On the messages page (session=${username})`);
await delay(10000);

// Write an html file with the page content
let pageContent = await page.content();
require('fs').writeFileSync('./test.html', pageContent);

received的未显示,我收到超时错误。 但是,如果我删除 waitForSelector 函数,并且只编写test.html文件,我们可以看到:

启用无头模式,部分页面未加载

无头模式 zh

禁用无头模式,加载所有页面

无头模式dis

在无头模式下,仅加载部分页面内容。 我不知道为什么。 即使我添加一分钟的超时,它也不会加载更多......我该怎么办?

注意:我尝试使用用户代理:

await page.setUserAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36");

(在let page = await browser.newPage()

我很确定这是一个条件竞争,并且它正在发生,因为您正在尝试在进入页面之前获取选择器。

尝试移动这些行:

await page.goto(entMessagesURL);
navPromise = page.waitForSelector('#js_boite_reception').then(() => {
    console.log('received');
});

我无法尝试重现您的错误,因为我不知道页面是什么以及它所使用的语言

您可以尝试使用选项waitUntil

await page.goto(entMessagesURL, {waitUntil: 'networkidle2'});
await page.setUserAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36");

这对我有用! 我的网站在本地尝试时阻止了无头模式。 添加标题后,我终于能够找到选择器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM