javascript - 在 Raspberry Pi Zero 上,puppeteer 在超时后挂起

标签 javascript linux raspberry-pi puppeteer raspberry-pi-zero

我在让 Raspberry Pi Zero 运行 puppeteer 时遇到一些问题,就像我在 tutorial 中看到的那样.

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

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

$ npm init -Y
$ npm install <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="037376737366776666712e606c716643322d32322d33" rel="noreferrer noopener nofollow">[email protected]</a>

此外,尝试在不将核心版本锁定到 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

我相信您拥有一个带有 1GHz 单核处理器和 512 MB RAM 的 RPi Zero 型号,如上所述 here 。因此,硬件和操作系统也将成为影响因素,例如打开 headless 浏览器、拍摄快照、将其存储到文件中;所有这些操作都需要时间。您可以单独对这些操作进行计时,以便更详细地了解所花费的总时间。

我已经在一台机器(Core i5 - 8 核、8 GB RAM 和 Ubuntu 18.04 LTS)上对其进行了测试,大约需要 4 秒。在该视频教程中,大约花了 9 秒。

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

您可以做的另一件事是在本地 Apache 服务器上托管一个简单的静态网页,并使用其地址(例如 http://localhost:8080/index.html )在没有互联网的情况下进行本地测试。在这种情况下,延迟会少得多,并且您可以验证它是否可以在您的 RPi Zero 上运行。在这种情况下,您可能也需要调整超时。您可以使用Python的SimpleHTTPServer也可以代替 Apache 服务器。

关于javascript - 在 Raspberry Pi Zero 上,puppeteer 在超时后挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61511273/

相关文章:

linux - 几个基本的dbus问题

linux 命令 xargs : maximum size of the arguments passed by it?

python - 在接收到的串行字符串中丢失数据

javascript - 有没有更好的方法来创建元素并将文本附加到它们/周围?

java - 从命名的 Linux 管道读取 BufferedInputStream 只能工作一次

javascript - 在单击单个元素时切换增量和减量计数

linux - 如何从 .sh 文件通过串行向 Arduino 发送命令?

ubuntu - 可靠的 : How to handle first login forced password change and push an ssh-key

javascript - 从 JSON : P5. js 中提取信息

javascript - 对具有 ID 的元素的 HTML href