【问题标题】:Puppeteer page doesn't want to load totally in headless modePuppeteer 页面不想完全以无头模式加载
【发布时间】:2023-12-17 11:48:01
【问题描述】:

这是我的代码:

// 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 文件,我们可以看到:

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

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

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

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

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()下)

【问题讨论】:

  • 如果您尝试使用实时网站,在无头模式下,您的请求中没有一些标头(尤其是用户代理),因此某些网站会阻止该请求,因为他们发现它是一个发送请求...所以在发送请求之前尝试将用户代理标头添加到您的页面page.setUserAgent ....如果这是您本地主机上的网站,您可能需要检查控制台是否有一些 js 错误
  • 我也有同样的问题,即使是使用用户代理...
  • 尝试检查控制台日志。见github.com/puppeteer/puppeteer#debugging-tips
  • 控制台中什么都没有,添加慢模式并不能解决任何问题...:\
  • @Androz2091can you try goto with option waitUntil, "await page.goto(entMessagesURL, {waitUntil: 'networkidle2'}); "

标签: javascript node.js puppeteer chromium headless


【解决方案1】:

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

尝试移动这些行:

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

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

【讨论】:

  • 不,看截图。页面未完全加载:\
【解决方案2】:

您可以尝试使用选项waitUntil

await page.goto(entMessagesURL, {waitUntil: 'networkidle2'});

【讨论】:

    【解决方案3】:
    await page.setUserAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36");
    

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

    【讨论】:

      最近更新 更多