相关疑难解决方法(0)

UnhandledPromiseRejectionWarning:错误:页面崩溃!使用木偶时

所以我使用了一个 while 循环,所以我的测试将在一个恒定循环中运行,直到我的后端崩溃。我已经实现了一个 try and catch(error) 所以任何前端崩溃自动化都会刷新并继续运行

while(true){
try{
    await page.waitFor(selector)
    await page.click(selector)    
}
catch(error){
    console.log("FE crashed with\n\n" + error + "\n\nRefreshing page and continuing profile switching")
    await page.reload(page);
    continue;
}}
Run Code Online (Sandbox Code Playgroud)

因此,确实任何超时错误都会自动刷新页面并继续循环。但我收到了不同的崩溃错误

(node:6535) UnhandledPromiseRejectionWarning: Error: Page crashed!
at Page._onTargetCrashed (/home/raymond/node_modules/puppeteer/lib/Page.js:170:24)
at CDPSession.Page.client.on.event (/home/raymond/node_modules/puppeteer/lib/Page.js:125:56)
at CDPSession.emit (events.js:182:13)
at CDPSession._onMessage (/home/raymond/node_modules/puppeteer/lib/Connection.js:200:12)
at Connection._onMessage (/home/raymond/node_modules/puppeteer/lib/Connection.js:112:17)
at _tickCallback (internal/process/next_tick.js:43:7)
at listOnTimeout (timers.js:294:7)
at processTimers (timers.js:268:5)
(node:6535) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch …
Run Code Online (Sandbox Code Playgroud)

javascript mocha.js node.js puppeteer

10
推荐指数
1
解决办法
7508
查看次数

错误:协议错误(Performance.enable):目标已关闭

我正在运行一个自动登录亚马逊和沃尔玛的应用程序,但有时脚本会抛出协议错误。我在下面提到了启动浏览器的代码 -

var browser = await puppeteer.launch({
    headless: false,
    ignoreHTTPSErrors: true,
    args: [
        '--disable-background-timer-throttling',
        '--disable-backgrounding-occluded-windows',
        '--disable-renderer-backgrounding',
        '--no-sandbox',
        '--disable-setuid-sandbox',
        '--ignore-ssl-errors'
    ],
    slowMo: Math.round(Math.random() * 10),
    userDataDir: dir
});
var page = await browser.newPage();
await page.setViewport({ width: 1280, height: 1024, deviceScaleFactor: 1 });

page.on('console', msg => {
    if (msg._type == "log")
        console.log(msg._text);
});
page.on('error', async (error) => {
    if (error.toString().match(/Page crashed/i)) {
        console.log("<--------- Page crashed ------------->");
        await browser.close();
    }
});
Run Code Online (Sandbox Code Playgroud)

node.js puppeteer

6
推荐指数
0
解决办法
3049
查看次数

UnhandledPromiseRejectionWarning:错误:协议错误(Runtime.callFunctionOn):目标已关闭。(傀儡师)

我是 Puppeteer 和 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();
})();
Run Code Online (Sandbox Code Playgroud)

以下是错误消息的详细信息:

(node:27876) UnhandledPromiseRejectionWarning: Error: Protocol error (Runtime.callFunctionOn): Target closed.
at …
Run Code Online (Sandbox Code Playgroud)

javascript chromium browser-testing node.js puppeteer

5
推荐指数
2
解决办法
1万
查看次数

page.vs. Puppeteer $方法

我对这两个代码块的差异感兴趣。

const $anchor = await page.$('a.buy-now');
const link = await $anchor.getProperty('href');
await $anchor.click();
Run Code Online (Sandbox Code Playgroud)
await page.evaluate(() => {
    const $anchor = document.querySelector('a.buy-now');
    const text = $anchor.href;
    $anchor.click();
});
Run Code Online (Sandbox Code Playgroud)

通常,我发现原始DOM元素page.evaluate()更易于使用,而$方法返回的ElementHandles是到目前为止的抽象。

但是我也许觉得异步Puppeteer方法可能更高效或更可靠?我在文档中找不到关于此的任何指导,并且有兴趣了解有关每种方法的专业人士/专业人士以及添加诸如之类的方法背后的动机的更多信息page.$$()

javascript node.js puppeteer

3
推荐指数
1
解决办法
434
查看次数

如何使用nodeJS和Puppeteer解决“目标已关闭”错误?

我正在尝试抓取和抓取一些网站以提取一些链接。我希望看到所有内容都hrefs打印到我的控制台上。但是,我收到以下错误。

out [ Promise { } ] (节点:15908) UnhandledPromiseRejectionWarning:错误:协议错误(Page.navigate):目标已关闭。

我究竟做错了什么?

这个答案说错误消息意味着browser.close()在我调用我的pageFunction.

但我正在使用async await,显然浏览器仍然对我关闭。

我该如何修复这个错误?

const domains = [...]

const pageFunction = async $posts => {
  const data = [];
  await $posts.forEach( $post => {
    data.push( $post.href );
  });
  return data;
}

(async () => {
  // start browser
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  // loop over domains
  const out = await domains.slice(-1).map( async domain => { …
Run Code Online (Sandbox Code Playgroud)

javascript asynchronous node.js promise puppeteer

3
推荐指数
1
解决办法
1万
查看次数