未处理的承诺拒绝(拒绝ID:1):错误:杀死ESRCH

时间:2017-11-13 13:55:49

标签: node.js bash web-scraping puppeteer

我已经对Web和SOF进行了一些研究,但发现没有什么对这个错误有帮助。

我使用Windows 10 Ubuntu Bash安装了Node和Puppeteer,但是没有设法让它工作,但我设法让它在没有Bash的Windows上工作。

我的命令是:

    node index.js

我的index.js尝试截取页面的屏幕截图:

    const puppeteer = require('puppeteer');

    async function run() {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();

    await page.goto('https://github.com');
    await page.screenshot({ path: 'screenshots/github.png' });

    browser.close();
    }

    run();

有没有人知道我可以解决这个问题的方法“错误:杀死ESRCH”错误?

4 个答案:

答案 0 :(得分:1)

我有同样的问题,这对我有用。 尝试将脚本更新为以下内容:

const puppeteer = require('puppeteer');

async function run() {
//const browser = await puppeteer.launch();
const browser = await puppeteer.launch({headless: true, args: ['--no-sandbox'] }); //WSL's chrome support is very new, and requires sandbox to be disabled in a lot of cases.
const page = await browser.newPage();

await page.goto('https://github.com');
await page.screenshot({ path: 'screenshots/github.png' });

await browser.close(); //As @Md. Abu Taher suggested
}

run();
const browser = await puppeteer.launch({ args: ['--no-sandbox'] });

如果您想阅读有关此内容的所有详细信息,此票证将包含它们(或指向它们的链接)。 https://github.com/Microsoft/WSL/issues/648

其他具有类似问题的木偶用户: https://github.com/GoogleChrome/puppeteer/issues/290#issuecomment-322851507

答案 1 :(得分:1)

我刚刚解决了这个问题。您需要做的是:

1)安装Debian依赖项

您可以在此文档中找到它们: https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md

sudo apt-get install所有那些坏男孩。

2)启动puppeteer时添加'--no-sandbox'标志

3)确保您的Windows 10是最新的。我错过了一个允许您启动Chrome的重要更新。

答案 2 :(得分:0)

积分不予考虑:

  1. Windows bash不是Ubuntu bash(还)的完全替代品。在许多情况下,不同的基于GUI的应用程序无法正常工作。此外,脚本可能会被W​​indows 10上的bash混淆。它可能认为os是linux而不是windows。

  2. Windows 10 bash仅支持 64位二进制文​​件,因此请确保内部使用的节点和chrome版本几乎是64位。 Puppeteer正在使用-child.pid来杀死子进程而不是Windows版本上的child.pid。确保木偶操作者不会被所有这些bash / windows事物弄糊涂。

  3. 回到你的案子。

    您在函数中使用browser.close(),但它应该是await browser.close(),否则它的执行顺序不正确。

    此外,您应该尝试在await page.close();之前添加browser.close();

    所以代码应该是,

    await page.close();
    await browser.close();
    

答案 3 :(得分:0)

我通过将chrome.exe软件链接到node_modules / puppeteer /.../ chrome来解决这个问题,如下所示

b