Javascript 未处理的PromisejectionWarning:错误:协议错误(Runtime.callFunctionOn):目标已关闭。(木偶演员)

Javascript 未处理的PromisejectionWarning:错误:协议错误(Runtime.callFunctionOn):目标已关闭。(木偶演员),javascript,node.js,chromium,puppeteer,browser-testing,Javascript,Node.js,Chromium,Puppeteer,Browser Testing,我不熟悉Puppeter和Node,在尝试执行以下代码时出现此错误: 'use strict'; const puppeteer = require('puppeteer'); const evalLib = require('./oaa_a11y_evaluation.js'); function evaluateRules() { var ruleset = OpenAjax.a11y.RulesetManager.getRuleset("ARIA_STRICT"); var e

我不熟悉Puppeter和Node,在尝试执行以下代码时出现此错误:

'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();
})();
以下是详细的错误消息:

(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.
(节点:27876)未处理的PromisejectionWarning:错误:协议错误(Runtime.callFunctionOn):目标已关闭。
承诺(C:\Users\Mihir\fae\node\u modules\puppeter\lib\Connection.js:200:56)

在new Promise(运行完全正常,因此我不认为我需要使用上面提到的修复程序。感谢您的帮助。

正如Sven在评论中提到的,您应该在关闭之前尝试在某些函数中使用
wait

试试这个:

“严格使用”;
const puppeter=require('puppeter');
const evalLib=require('./oaa_a11y_evaluation.js');
异步函数evaluateRules(){
var ruleset=OpenAjax.a11y.RulesetManager.getRuleset(“ARIA_STRICT”);
var evaluator_factory=OpenAjax.a11y.EvaluatorFactory.newInstance();
evaluator_factory.setParameter('规则集',规则集);
evaluator_factory.setFeature('eventProcessing','fae util');
评估者_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);
返回;
}
(异步()=>{
const browser=wait puppeter.launch();
var page=await browser.newPage();
等待页面。转到('http://mihirkumar.com/“,{waitUntil:'加载'});
等待页面。评估(评估小册子);
等待浏览器关闭();

})()
感谢您的回复。使函数异步显然是一个更好的改变。我的问题是我没有将OpenAjax javascript库注入加载的页面。一旦我使用Puppeter的page.addScriptTag函数这样做了,一切都很好。

您的问题是不知道如何处理未处理的函数吗拒绝,或者你不知道为什么会出现协议错误?我不知道如何处理拒绝,也不知道为什么会发生拒绝/我做错了什么导致拒绝。除了明显的消息“目标已关闭”之外,我不知道更多。用
尝试
/
抓住
等待
等待
处理拒绝在他的案例中,除了打印错误消息并使测试失败之外,你没有什么可以做的。在等待的过程中进行尝试并不能解决问题。是的,只是发出“未处理的拒绝警告”走开。我不知道导致协议错误的问题可能是什么-但是如果这是你想知道的,你应该回答你的问题并提供一个更合适的标题。