- 839
- 0
开始打开网页2021-12-22T09:32:19.799Z [verbose] 访问url次数 1 2021-12-22T09:32:32.340Z [verbose] 标签页 32021-12-22T09:33:09.763Z [verbose] 浏览器错误 { Error: Protocol error (Runtime.callFunctionOn): Target closed. at Promise (/code/node_modules/puppeteer/lib/Connection.js:183:56) at Promise (null:null:null) at send (/code/node_modules/puppeteer/lib/Connection.js:182:12) at _evaluateInternal (/code/node_modules/puppeteer/lib/ExecutionContext.js:107:44) at evaluateHandle (/code/node_modules/puppeteer/lib/ExecutionContext.js:57:17) at (/code/node_modules/puppeteer/lib/helper.js:112:23) at rerun (/code/node_modules/puppeteer/lib/DOMWorld.js:570:65) at _tickCallback (internal/process/next_tick.js:68:7) message: 'Protocol error (Runtime.callFunctionOn): Target closed.' }2021-12-22T09:33:09.764Z [error] (node:23) UnhandledPromiseRejectionWarning: Error: Protocol error (Network.getCookies): Session closed. Most likely the page has been closed. at send (/code/node_modules/puppeteer/lib/Connection.js:180:29) at cookies (/code/node_modules/puppeteer/lib/Page.js:382:32) at (/code/node_modules/puppeteer/lib/helper.js:112:23) at Promise (/code/aicard-event.js:367:28)2021-12-22T09:33:09.764Z [error] (node:23) 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: 2)2021-12-22T09:33:09.764Z [error] (node:23) [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.FC Invoke End RequestId: , Error: Function timed out after 120 seconds (maxMemoryUsage: 0MB)我这块在第一次打开页面的时候waitForFunction报错提示超时,于是我会再重试一次,这个时候waitForFunction就会报Protocol error (Runtime.callFunctionOn): Target closed.,这个问题我十次里面会遇到一两次,想问问这个是为啥啊,我中间url啥的都没改,就只是重新再page.goto一次,为什么会提示这个错误呢。还有一个问题,这个是我这个方法的结构,我上面waitForFunction报错之后进入catch,在这里面获取cookie,但是目标关闭导致失败,这个时候什么会提示后面的错误,我想问问我这个不是写了reject吗,完了在调用toPDF时也写了.then().catch(),请问这个正确的写法该是怎样的呢function toPDF() { return new Promise((resolve, reject) => { for (let i = 0; i < 2; i++) { try { //打开页面生成pdf resolve() } catch (e) { // 获取cookie } } reject(error) })}psfunction convertToPDF(url, context) { // 生成browser return new Promise(async (resolve, reject) => { let browser for (let i = 0; i < 2; i++) { console.log('开始生成浏览器和页面'); let page let nowTime try { if (!browser) { browser = await puppeteer.launch({ headless: true, ignoreHTTPSErrors: true, args: [ '--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage', ], executablePath: '/mnt/fun/fun/local-chromium/Linux-706915/chrome-linux/chrome' }) } page = await browser.newPage(); //将超时时间设置成无限 page.setDefaultTimeout(0); page.setDefaultNavigationTimeout(0); console.log('开始打开网页'); for (let urlNumber = 1; urlNumber < 6; urlNumber++) { try { console.log('访问url次数', urlNumber, ':', url) // 等待网页所有请求结束 nowTime = new Date().getTime() / 1000 await page.goto(url, {waitUntil: 'networkidle0'}); break } catch (e) { console.log('打开url错误开始重试') console.log(e) if (urlNumber >= 5) { console.log('打开url失败') } } } //设置监控 const tags = browser.pages() console.log('标签页', (await tags).length) // 等网页加载成功,超时时间45s const watchDog = page.waitForFunction('window.status == "loaded"', {timeout: 45 * 1000}); await watchDog //检查是否生成失败 let error = null; await page.cookies().then(cookies => { console.log('是否成功'); for (let cookie of cookies) { if (cookie.name === 'errorMessage') { error = cookie.value; break; } else if (cookie.name.indexOf('debugMsg') >= 0) { console.log(JSON.stringify(cookie.value)); } } }) error = error === null ? null : JSON.parse(error); //如果失败 if (error !== null && error.errorType === 0) { console.log('失败123'); console.log('失败', JSON.stringify(error)); // 关闭browser await browser.close(); } //如果成功 else { console.log('生成pdf'); // 生成pdf await page.pdf({ path: outputFile, format: 'A4', printBackground: true, margin: {top: 0, right: 0, bottom: 0, left: 0}, preferCSSPageSize: true }); // 关闭browser await browser.close(); resolve(outputFile); } break } catch (e) { console.log('浏览器错误', e) await page.cookies(url).then(cookies => { cookies.forEach(cookie => { console.log(cookie.name, Number(cookie.value) - nowTime); }) }) } } reject('pdf错误') })}
0
打赏
收藏
点击回答
- 共 0 条
- 全部回答
-
噜噜噜瓜o3o 普通会员 1楼
Puppeteer 是一个 JavaScript 库,它用于自动化浏览器。如果你在使用 Puppeteer 打开网页时遇到问题,你可以尝试以下方法:
-
检查 Puppeteer 是否已经安装。你可以使用
npm list puppeteer命令来查看 Puppeteer 是否已经安装。如果没有安装,你可以使用npm install puppeteer命令来安装。 -
检查你的网络连接。Puppeteer 需要网络连接才能运行。确保你的网络连接是正常的。
-
检查你的浏览器是否已经打开。你可以使用
window.location属性来检查浏览器是否已经打开。 -
检查你的 Puppeteer 运行环境。确保你的 Node.js 环境已经安装,并且 Node.js 的版本和 Puppeteer 的版本匹配。
-
如果问题仍然存在,你可以尝试提供更详细的错误信息。错误信息通常会包含错误发生的时间、错误发生的位置以及错误的具体描述。
如果以上方法都不能解决问题,你可以尝试查阅 Puppeteer 的官方文档或者社区论坛来寻求帮助。
-
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

