今回は、PHPでChromeの自動操作を実行します。公式ではphpでSeleniumを動かすドライバーがないため、Facebookの人が作ったSeleniumのPHP版、facebook-webdriverを使用します。

環境

今回、facebook/webdriverを構築するために用意した環境は、以下のとおりです。

  • CentOS7
  • GoogleChrome
  • Chromedriver
  • PHP7.2
  • composer

facebook/webdriverをインストール

facebook/webdriverをインストールするには、composerというPHPのパッケージ管理システムを使います。

# curl -sS https://getcomposer.org/installer | php

composerをパスが通っている場所に移動します。

# mv composer.phar /usr/local/bin/composer.phar

composer.pharを実行して問題なく動くか確認します。以下のコマンドを実行して「composer」と端末上に表示されればOKです。

# /usr/local/bin/composer.phar

composer.jsonを編集します。

# vi composer.json
{
        "require": {
                "facebook/webdriver" : "*"
        }
}

composerを利用して、facebook/webdriverをインストールします。

# php /usr/local/bin/composer.phar install

これで設定は完了です。

実行ファイルの作成

facebook/webdriverの設定が完了したら、実行ファイルの作成をします。

# vi test.php
class webdriverExec {
    public function run()
    {
        $screenPath = '/tmp/screenshot.png';

        $driverPath = realpath("__DIR__ . "/chromedriver");
        putenv("webdriver.chrome.driver=" . $driverPath);

        $options = new ChromeOptions();
        $options->addArguments(['--headless']);
        $options->addArguments(['--no-sandbox']);

        $caps = DesiredCapabilities::chrome();
        $caps->setCapability(ChromeOptions::CAPABILITY, $options);
        $driver = ChromeDriver::start($caps);

        $driver->get('http://www.yahoo.co.jp/');
        $driver->takeScreenshot($screenPath);

        $driver->close();
    }
}

$s = new webdriverExec();
$s->run();

先ほど作成した、test.phpファイルを実行します。

# php test.php

実行後、tmpディレクトリ内にYahooのトップページのスクショが保存されていることが確認できます。

参考サイト

facebook/php-webdriverでヘッドレスのChromeを操作