我在下面的脚本中打开一个页面并截取屏幕截图。
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
我尝试了无头模式false和browser.newPage(“new context”);正如他们在github页面中提到的那样,仍然无法正常工作。
答案 0 :(得分:2)
PHP将阻止下一次执行,直到当前的一次完成。这就是为什么它与nodejs的不同之处。从php控制nodejs会让它自己分担一些问题。
如果你复制这一行并运行它,你只能看到一个chrome,如果当前的那个没有关闭,下一个就不会执行。
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
答案 1 :(得分:0)
我已经使用https://www.npmjs.com/package/concurrently一次运行多个puppeteer脚本。你可以看到我在这里运行的命令 - https://github.com/Addstones/rpa/blob/master/package.json#L11