2
1

More than 1 year has passed since last update.

php で headless browser chrome-php

Last updated at Posted at 2022-09-23

・指定したサイトのスクリーンショットを取りたい
・スマホ用ページを取得したい
・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

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1