FacebookのWebDriverクライアントライブラリを使った、Chromeのリモート操作について。
準備
Chromeをリモート操作するため、ChromeDriverをダウンロードします。 ここではCentOSを使用するので、最新バージョンのLinux用 chromedriver_linux64.zip をダウンロードして解凍します。
Chromeがインストールされていない場合、以下のページを参考にインストールします。
facebook/php-webdriverがインストールされていない場合、以下のページを参考にインストールします。
-
ヘッドレスChromeの操作テスト
PHPプログラムでChromeDriverを使って、ヘッドレスのChromeをリモート操作してテストします。 OSはCentOS7.2で、Selenium Serverは使用しません。
例
<?php require_once(__DIR__ . '/../vendor/autoload.php'); use Facebook\WebDriver; use Facebook\WebDriver\WebDriverExpectedCondition; use Facebook\WebDriver\WebDriverBy; use Facebook\WebDriver\Chrome\ChromeOptions; use Facebook\WebDriver\Chrome\ChromeDriver; use Facebook\WebDriver\Remote\DesiredCapabilities; class Test { public function run() { $screenPath = '/vagrant/screenshot.png'; // ダウンロードしたchromedriverのパスを指定 $driverPath = realpath(__DIR__ . "/chromedriver"); putenv("webdriver.chrome.driver=" . $driverPath); // Chromeを起動するときのオプション指定用 $options = new ChromeOptions(); // ヘッドレスで起動するように指定 $options->addArguments(['--headless']); $caps = DesiredCapabilities::chrome(); $caps->setCapability(ChromeOptions::CAPABILITY, $options); $driver = ChromeDriver::start($caps); $driver->get('http://www.yahoo.co.jp/'); // スクリーンショットを保存 $driver->takeScreenshot($screenPath); // ブラウザを閉じる $driver->close(); } } $t = new Test(); $t->run();
これをtest_client.phpと保存した場合、以下のように実行します。
$ php test_client.php PHP Notice: Constant CURLOPT_CONNECTTIMEOUT_MS already defined in /home/vagrant/work/selenium/vendor/facebook/webdriver/lib/Net/URLChecker.php on line 70 PHP Notice: Constant CURLOPT_CONNECTTIMEOUT_MS already defined in /home/vagrant/work/selenium/vendor/facebook/webdriver/lib/Net/URLChecker.php on line 70 $Noticeのメッセージが表示されますが、無視します。 正常ならスクリーンショットのファイルが作成されていますので、その画像ファイルを確認します。 Yahooトップページの画像になっていればOKです。