2017-12-19 11 views
1

私は以下のスクリプトを使ってページを開き、スクリーンショットを撮っています。複数の人形を一度に実行

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スクリプトを一time.Butを実行すると正常に動作し、一つは途中で停止していると、別のエラーコード

をプリントアウトし、私はヘッドレスを試してみましたmode false、browser.newPage( "新しいコンテキスト");彼らのgithubのページで述べたように、まだ動作していません。

+0

実行ポートが問題になることがありますか? – Thamaraiselvam

+0

いいえ、私はその現在のインスタンスを閉じて、新しいインスタンスを開くと思います – Vishnu

+0

PHP経由で試すのではなく、複数の端末で経由してみましたか? – Thamaraiselvam

答えて

1

PHPは現在のものが終了するまで次の実行をブロックします。それがnodejとは異なる理由です。 PHPからnodejを制御することは、それ自身の問題を共有することになります。

この行を複製して実行すると、クロムが1つしか表示されず、現在のクロムが閉じないと次のクロムも実行されません。

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

関連する問題