Puppeteer throws "UnhandledPromiseRejectionWarning: TimeoutError: Navigation Timeout Exceeded" sometimes
Puppeteer throws "UnhandledPromiseRejectionWarning: TimeoutError: Navigation Timeout Exceeded" sometimes
我正在用 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" 脚本 returns 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
- 节点 8.11.1
- 人偶操纵者 1.18.0
- 人偶核心 1.18.0
有时服务器不响应无头请求 (puppeteer #2963)。
为了验证这一点,我会尝试 运行 调试模式下的代码:
DEBUG=*session node your-test-file.js
我遇到了同样的问题,但通过替换解决了
{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'
});
...
我正在用 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" 脚本 returns 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
- 节点 8.11.1
- 人偶操纵者 1.18.0
- 人偶核心 1.18.0
有时服务器不响应无头请求 (puppeteer #2963)。
为了验证这一点,我会尝试 运行 调试模式下的代码:
DEBUG=*session node your-test-file.js
我遇到了同样的问题,但通过替换解决了
{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'
});
...