・指定したサイトのスクリーンショットを取りたい
・スマホ用ページを取得したい
・Laravelで使う
参考
https://qiita.com/oouaioi/items/fcd157da21368dc8e5b9
https://github.com/chrome-php/chrome
インスコ
composer require chrome-php/chrome
文字化け対策のため、centosに日本語を入れとく
sudo yum install ipa-gothic-fonts ipa-pgothic-fonts
コード
hoge.php
use HeadlessChromium\BrowserFactory;
//略
$browserFactory = new BrowserFactory();
//ブラウザ表示サイズを指定
$browserFactory->setOptions([
'windowSize' => [375, 900],
'noSandbox' => true//cron で動くように
]);
$browser = $browserFactory->createBrowser();
try {
// 新しいページを作成し、指定のURLへ移動する
$page = $browser->createPage();
//スマホ要UAをセット
$page->setUserAgent('Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1');
$page->navigate('https://yahoo.co.jp')->waitForNavigation();
//javascript実行の結果を待つ
sleep(5);
// スクリーンショットを撮る
$page->screenshot()->saveToFile(public_path("/tmp/screen_shot".time().".png"));
} finally {
// headless chromeの終了
$browser->close();
}
OK
備考
pythonでやりゃいいじゃん
あまり使わないのでコードがぐちゃぐちゃになるのが嫌だ
phpだけで完結したい
なんでスクショを取りたいと思うの?
本来はvue3で書いたコードをグラフ生成のため
cronで動かしたかった
puphpeteerはどうなの?
やったけどエラーが出るので、こっちにした。
sandbox エラーが出た
[2022-10-14 14:26:02] local.ERROR: Chrome process stopped before startup completed. Additional info: [1014/142602.129443:ERROR:zygote_host_impl_linux.cc(90)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180. {"exception":"[object] (RuntimeException(code: 0): Chrome process stopped before startup completed. Additional info: [1014/142602.129443:ERROR:zygote_host_impl_linux.cc(90)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180. at /var/www/html/twikon.club/vendor/chrome-php/chrome/src/Browser/BrowserProcess.php:410)
[stacktrace]
cronで動作させたら上記エラーが出た。
//ブラウザ表示サイズを指定
$browserFactory->setOptions([
'windowSize' => [375, 900],
'noSandbox' => true//cron で動くように
]);
とすればOK