gpt4 book ai didi

javascript - Puppeteer 有时会抛出 "UnhandledPromiseRejectionWarning: TimeoutError: Navigation Timeout Exceeded"

转载 作者:行者123 更新时间:2023-12-02 23:25:20 26 4
gpt4 key购买 nike

我正在使用 Puppeteer 测试 Headless Chrome,所以我已经 reading docs并运行此代码*:

const puppeteer = require('puppeteer');

(async() => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://www.github.com', {waitUntil: 'networkidle2'});
await page.screenshot({ path: 'screenshot.png' });

await browser.close();
})();

(*摘自 Docs-Usage )。

我更改了“example.com”,因为工作正常并尝试与其他站点一起使用,但“github.com”脚本在 await page.goto() 行中返回超时异常:

(node:7840) UnhandledPromiseRejectionWarning: TimeoutError: Navigation Timeout Exceeded: 30000ms exceeded
at Promise.then (C:\_test\headless\node_modules\puppeteer\lib\LifecycleWatcher.js:142:21)
at <anonymous>
-- ASYNC --
at Frame.<anonymous> (C:\_test\headless\node_modules\puppeteer\lib\helper.js:111:15)
at Page.goto (C:\_test\headless\node_modules\puppeteer\lib\Page.js:629:49)
at Page.<anonymous> (C:\_test\headless\node_modules\puppeteer\lib\helper.js:112:23)
at C:\_test\headless\index.js:7:16
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:188:7)
(node:7840) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:7840) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

如果我使用常规浏览器访问 github.com,会按正常时间连接,所以我的互联网连接不是问题。

我添加了下一行,代码在两分钟后运行良好:

page.setDefaultNavigationTimeout(0);

但是如果我设置puppeteer.launch({headless:false})代码在短短几秒钟内就可以完美运行

我正在以下位置运行测试:

  • Windows 7 专业版 SP1
  • Node 8.11.1
  • puppeteer 师1.18.0
  • puppeteer 核心 1.18.0

最佳答案

我遇到了同样的问题,但通过替换解决了

{waitUntil: 'networkidle2'}

与:

{waitUntil: 'domcontentloaded'}

更多信息请参见:

[https://github.com/puppeteer/puppeteer/issues/2482][1]

仅添加更多信息,某些网站有大量内容,因此页面可能无法在 30 秒的默认超时内加载。因此,消除这个问题,您可以通过这样做完全消除超时:

await page.setDefaultNavigationTimeout(0)

所以这看起来像这样:

const puppeteer = require('puppeteer');

(async () => {

const browser = await puppeteer.launch({ headless: false });
const page = await browser.newPage();
await page.setDefaultNavigationTimeout(0);
await page.goto('https://www.example.com/', {
waitUntil: 'networkidle2'
});

关于javascript - Puppeteer 有时会抛出 "UnhandledPromiseRejectionWarning: TimeoutError: Navigation Timeout Exceeded",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56757822/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com