我有下面的脚本来打开页面并截取屏幕截图。
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 控制和创建非阻塞应用程序,您必须了解有关 PCNTL 或ReactPHP
关于php - 一次运行多个 puppeteer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47885603/