首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >UnhandledPromiseRejectionWarning:错误:协议错误(Runtime.callFunctionOn):目标已关闭。(木偶戏演员)

UnhandledPromiseRejectionWarning:错误:协议错误(Runtime.callFunctionOn):目标已关闭。(木偶戏演员)
EN

Stack Overflow用户
提问于 2018-06-01 22:09:39
回答 3查看 13.4K关注 0票数 5

我是Puppeteer和Node的新手,在尝试执行以下代码时遇到此错误:

代码语言:javascript
复制
'use strict';

const puppeteer = require('puppeteer');
const evalLib = require('./oaa_a11y_evaluation.js');

function evaluateRules() {
  var ruleset = OpenAjax.a11y.RulesetManager.getRuleset("ARIA_STRICT");
  var evaluator_factory = OpenAjax.a11y.EvaluatorFactory.newInstance();
  evaluator_factory.setParameter('ruleset', ruleset);
  evaluator_factory.setFeature('eventProcessing', 'fae-util');
  evaluator_factory.setFeature('groups', 7);
  var evaluator = evaluator_factory.newEvaluator();
  var evaluation = evaluator.evaluate(window.document, document.title, document.location.href);
  // var out = evaluation.toJSON(true);
  return;
}

(async() => {
  const browser = await puppeteer.launch();
  var page = await browser.newPage();
  await page.goto('http://mihirkumar.com/', {waitUntil: 'load'});
  page.evaluate(evaluateRules);
  await browser.close();
})();

以下是完整详细的错误消息:

代码语言:javascript
复制
(node:27876) UnhandledPromiseRejectionWarning: Error: Protocol error (Runtime.callFunctionOn): Target closed.
at Promise (C:\Users\Mihir\fae\node_modules\puppeteer\lib\Connection.js:200:56)
at new Promise (<anonymous>)
at CDPSession.send (C:\Users\Mihir\fae\node_modules\puppeteer\lib\Connection.js:199:12)
at ExecutionContext.evaluateHandle (C:\Users\Mihir\fae\node_modules\puppeteer\lib\ExecutionContext.js:79:75)
at ExecutionContext.evaluate (C:\Users\Mihir\fae\node_modules\puppeteer\lib\ExecutionContext.js:46:31)
at Frame.evaluate (C:\Users\Mihir\fae\node_modules\puppeteer\lib\FrameManager.js:326:20)
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:188:7)
(node:27876) 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:27876) [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.

来自https://github.com/GoogleChromeLabs/puppeteer-examples的其他示例运行得非常好,所以我不认为我需要使用提到的here修复。谢谢你的帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-28 08:20:39

感谢您的回复。使函数异步无疑是一个更好的改变。我的问题是我没有将OpenAjax javascript库注入到加载的页面中。一旦我用木偶人的page.addScriptTag函数做到了这一点,事情就运行得很好了。

票数 1
EN

Stack Overflow用户

发布于 2018-06-28 05:32:38

正如斯文在评论中提到的,在关闭浏览器之前,您应该在每个返回promise (几乎是所有的)的page函数上使用await

试试这个:

代码语言:javascript
复制
'use strict';

const puppeteer = require('puppeteer');
const evalLib = require('./oaa_a11y_evaluation.js');

async function evaluateRules() {
  var ruleset = OpenAjax.a11y.RulesetManager.getRuleset("ARIA_STRICT");
  var evaluator_factory = OpenAjax.a11y.EvaluatorFactory.newInstance();
  evaluator_factory.setParameter('ruleset', ruleset);
  evaluator_factory.setFeature('eventProcessing', 'fae-util');
  evaluator_factory.setFeature('groups', 7);
  var evaluator = evaluator_factory.newEvaluator();
  var evaluation = evaluator.evaluate(window.document, document.title, document.location.href);
  // var out = evaluation.toJSON(true);
  return;
}

(async() => {
  const browser = await puppeteer.launch();
  var page = await browser.newPage();
  await page.goto('http://mihirkumar.com/', {waitUntil: 'load'});
  await page.evaluate(evaluateRules); // <-- await here
  await browser.close();
})();

票数 5
EN

Stack Overflow用户

发布于 2021-12-07 21:26:01

如果你使用的是jest,只需添加"exitOnPageError: false

代码语言:javascript
复制
module.exports = {
  server: {
    command: "PORT=3005 BROWSER=none react-scripts start",
    port: 3005,
    launchTimeout: 30000,
  },
  launch: {
    headless: process.env.HEADLESS !== "false",
    devtools: true,
  },
  exitOnPageError: false
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50645321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档