一次运行多个木偶操纵者

时间:2017-12-19 11:07:18

标签: 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

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

2 个答案:

答案 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控制和创建非阻塞应用程序,您必须详细了解PCNTLReactPHP

答案 1 :(得分:0)

我已经使用https://www.npmjs.com/package/concurrently一次运行多个puppeteer脚本。你可以看到我在这里运行的命令 - https://github.com/Addstones/rpa/blob/master/package.json#L11