【问题标题】:Unhandled promise rejection (rejection id: 1): Error: kill ESRCH未处理的承诺拒绝(拒绝 id:1):错误:杀死 ESRCH
【发布时间】:2018-05-10 22:32:54
【问题描述】:

我对 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”错误的方法吗?

【问题讨论】:

  • ESRCH 在没有这样的 pid 运行时被 kill 抛出。添加一条 try-catch 语句来记录错误并获取行号。然后您需要深入研究产生此错误的命令(或更新您的问题)
  • @paul 我在 WSL 中与 puppeteer 的行为相同。话虽如此,这些天我可以无头运行业力测试。

标签: node.js bash web-scraping puppeteer


【解决方案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

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

【讨论】:

    【解决方案2】:

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

    1) 安装 Debian 依赖项

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

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

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

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

    【讨论】:

      【解决方案3】:

      不考虑的点:

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

      2. Windows 10 bash 仅支持 64 位二进制文​​件,因此请确保其中使用的节点和 chrome 版本几乎是 64 位。 Puppeteer 使用 -child.pid 杀死子进程,而不是 Windows 版本上的 child.pid。确保 puppeteer 不会被所有这些 bash/windows 搞糊涂。

      回到你的情况。

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

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

      所以代码应该是,

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

      【讨论】:

        【解决方案4】:

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

        ln -s /mnt/c/Program\ Files\ \(x86\)/Google/Chrome/Application/chrome.exe  node_modules/puppeteer/.local-chromium/linux-515411/chrome-linux/chrome
        

        【讨论】:

          猜你喜欢
          • 2018-01-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-04-16
          • 1970-01-01
          • 2019-10-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多