运行 同时操作多个人偶

Run multiple puppeteer at once

我有下面的脚本来打开一个页面并截图。

 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("node test.js ".$mainid." 2>&1", $out, $err);
print_r($out);
print_r($err);

当我 运行 php 脚本一个 time.But 当我 运行 相同时它工作正常 同时脚本,一个在中间停止,另一个打印出错误代码 124

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

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 不是一个好主意,它不是正确的工具,但如果您仍然想使用 [=19= 控制和创建非阻塞应用程序],你要多了解PCNTL or ReactPHP

我用过https://www.npmjs.com/package/concurrently to run multiple puppeteer scripts at once. You can see the command that I'm running here - https://github.com/Addstones/rpa/blob/master/package.json#L11