在 Raspberry Pi 零时,puppeteer 在超时后挂起

On Raspberry Pi Zero, puppeteer hangs after timeout exceeded

我在将 Raspberry Pi 归零到 运行 puppeteer 时遇到一些问题,就像我在 tutorial.

中看到的那样

到目前为止我做了类似的事情:

$ sudo apt-get install chromium-browser chromium-codecs-ffmpeg --yes

$ npm init -Y
$ npm install puppeteer-core@1.11.0

另外,在不将核心版本锁定为 1.11.0 的情况下进行了尝试 - 结果相同。

这是我的 index.js:

const puppeteer = require('puppeteer-core');

(async () => {
    try {
        const browser = await puppeteer.launch({ executablePath: 'chromium-browser', headless: true, product: 'chrome' });
        const page = await browser.newPage();
        page.setDefaultNavigationTimeout(25 * 1000);
        await page.goto('https://www.google.com/');
        await page.screenshot({ path: 'screenshot.png' });

        await browser.close();
        console.log('screenshot taken');
    } catch (e) {
        console.log(e.message);
    }
})();

而且,当我这样 运行 时,我得到超时错误:

$ node index.js
Navigation Timeout Exceeded: 25000ms exceeded

但是,它只是挂起。没有出口!

非常感谢任何帮助,谢谢。

以下几点可能对您有所帮助:

您需要确保您的 RPi 上的互联网连接能够在 25 秒超时限制内为您提供良好服务,即 page.setDefaultNavigationTimeout(25 * 1000);。您可以使用 ping 命令来观察延迟,即 ping google.com.

我相信您有一个 RPi 零型号,如前所述 here,具有 1GHz 单核处理器和 512 MB RAM。因此,硬件和 OS 也将成为这里的影响因素,例如打开无头浏览器、拍摄快照、将其存储到文件中;所有这些操作都需要时间。您可以分别对这些操作进行计时,以便在粒度级别更好地了解所花费的总时间。

我已经在一台机器上进行了测试(酷睿 i5 - 8 核,8 GB 内存,Ubuntu 18.04 LTS),耗时约 4 秒。在那个视频教程中,花了大约 9 秒。

因此,一个简单的解决方案是使用更长的超时值。

您可以做的另一件事是在您的本地 Apache 服务器上托管一个简单的静态网页并使用其地址(例如 http://localhost:8080/index.html) to test it locally without the internet. The latency would be far less in this case and you'd be able to verify that it works on your RPi Zero. You might need to adjust timeout in this case too. You may use Python's SimpleHTTPServer 而不是 Apache 服务器。