php - 一次运行多个 puppeteer

标签 php node.js puppeteer

我有下面的脚本来打开页面并截取屏幕截图。

 const puppeteer = require('puppeteer');

    (async () => {
        const browser = await puppeteer.launch({ args: ['--no-sandbox', '--disable-setuid-sandbox'] });
        const page = await browser.newPage();


        await page.goto('https://example');
        const elems = await page.$('.thumbnail');

        await elems.screenshot({ path: 'thumbnail.png', type: 'png' });

        browser.close();

        await console.log("done");
      })();

我通过 php exec 命令运行它,如下所示。

exec("node test.js ".$mainid." 2>&1", $out, $err);
print_r($out);
print_r($err);

当我运行 php 脚本一次时它工作正常。但是当我运行相同的时候 同时脚本,一个在中间停止,另一个打印出错误代码 124

我尝试了 headless 模式 false 和 browser.newPage("new context");正如他们的 github 页面中提到的,仍然无法正常工作。

最佳答案

PHP 将阻止下一次执行,直到当前执行完成。这就是它与nodejs不同的原因。从 php 控制 Nodejs 也会有它自己的问题。

如果复制这一行并运行它,您将只看到一个镶边,并且如果当前镶边未关闭,下一个镶边甚至不会执行。

exec("node test.js ".$mainid." 2>&1", $out, $err); print_r($out); print_r($err);
exec("node test.js ".$mainid." 2>&1", $out, $err); print_r($out); print_r($err);

通常,将 php 用于非阻塞应用程序并不是一个好主意,它只是不是合适的工具,但如果您仍然想使用 php 控制和创建非阻塞应用程序,您必须了解有关 PCNTLReactPHP

关于php - 一次运行多个 puppeteer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47885603/

相关文章:

php - 数组不会填充 while 循环

php - PHP邮件功能无法完成电子邮件的发送

javascript - 在 headless 服务器云上运行的特定网站上的 Puppeteer 超时

php - 使用 "?|"运算符执行查询

PHP 执行响应作为字符串?

Node.js Streaming/Piping 错误处理(错误时更改响应状态)

javascript - Haraka Smtp 服务器(编辑出站电子邮件正文内容)

node.js - 带有 passport-twitter 的 sails.js

javascript - 无法将代理与 puppeteer 一起使用。错误 : ERR_NO_SUPPORTED_PROXIES gets thrown

javascript - NodeJS 使用 Puppeteer 处理弹出窗口