使用 PHP 的无头浏览器 chrome-php

我想要截取指定网站的屏幕截图。
我想要获取适用于智能手机的页面。
我想在Laravel中使用。

请看参考。

以下是一个选项的中文释义:

Qiita是一个在线社区,该链接提供了有关如何在PHP中使用Chrome浏览器的文档。同时,该GitHub链接是关于一个名为chrome-php的项目,它提供了一个用于控制Chrome浏览器的PHP API。

安装

composer require chrome-php/chrome

为了防止乱码问题,在CentOS中安装日语。

sudo yum install ipa-gothic-fonts ipa-pgothic-fonts

Code 代码 mǎ)


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();
}

好吧。

準備考試

只要用Python就可以了嘛

因为很少使用,所以不喜欢代码变得一团糟。
希望只使用php来完成。

为什么你想要截屏呢?

原本是希望使用Vue3编写的代码来生成图表,还希望通过cron计划任务来运行。

Puppeteer怎么样?

我尝试了一下,但是遇到了错误,所以选择了这个。

沙盒出现了错误

[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 で動くように
]);

如果是这样,那就可以了。

广告
将在 10 秒后关闭
bannerAds