Memo

メモ > 技術 > 開発: Selenium > PHP版Selenium環境をWindowsに構築

■PHP版Selenium環境をWindowsに構築
PHPでブラウザ自動化 - Qiita https://qiita.com/tsuuuuu_san/items/61379b797878d0e0f4d7 PHPUnit + php-webdriver でWebUIのテストを書く - Qiita https://qiita.com/zaburo/items/f11357170953a3c34b8f PHPUnit_Extensions_Selenium2TestCase での各種HTML操作 - Qiita https://qiita.com/84q/items/a0459c03d12315dfd1e8 Selenium webdriverメソッド~PHP~ - Qiita https://qiita.com/yukanashi/items/9c32891171dd09c40be2 php-webdriverでconfirmダイアログをクリックする - saitodev.co https://saitodev.co/article/php-webdriver%E3%81%A7confirm%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%... selenium - seleniumで要素取得したいが,2つ同名のものがあるため,後者を選択できない - スタック・オーバーフロー https://ja.stackoverflow.com/questions/67300 上記のページを参考に、JavaScriptでテストを作成&実行する 以下を作業フォルダとする C:\localhost\home\selenium\public_html ■XAMPPを導入 XAMPPを導入しておく(すでにインストールしている場合は不要) Windows内のブラウザを操作するために使うので、Vagrant環境があっても別途Windows上にPHPが必要 以降の解説では、
C:\xampp\php\php.exe -v
でPHPを実行できるようにしたと仮定する PHPをより簡単に使えるようにするため、PHPを実行したい場所(作業フォルダ内)に php.bat を作成して以下を記述する
@ECHO OFF C:\xampp\php\php.exe %*
これで単に
php -v
と入力するだけでPHPを実行できる。 ■Composerを導入
C:\xampp\php\php.exe composer.phar
でComposerを実行できるようにしたとする Composerをより簡単に使えるようにするため、Composerを実行したい場所(作業フォルダ内)に composer.bat を作成して以下を記述する
@ECHO OFF C:\xampp\php\php.exe "%~dp0composer.phar" %*
これで単に
composer
と入力するだけでComposerを実行できる。 ■PHP用Webドライバを入手 Composerで以下を実行し、Seleniumの実行に必要なライブラリをインストールする
composer require phpunit/phpunit composer require facebook/webdriver
■Chromeドライバを入手 以下からChromeDriverをダウンロードする。解凍して作成されるファイルを、composer.pharと同じ場所に配置する https://sites.google.com/chromium.org/driver/ ※今回は「ChromeDriver 87.0.4280.88」をダウンロードしたが、利用中のChromeのバージョンに合ったものをダウンロードする Chromeバージョンアップに伴い、後に「ChromeDriver 89.0.4389.23」「ChromeDriver 91.0.4472.101」と都度変更した ※マイナーバージョンは差があっても問題ないみたい。「91.0.4472.114」のときは「ChromeDriver 91.0.4472.101」で動作した ※Windowsの場合、chromedriver_win32.zip をダウンロードして解凍すると chromedriver.exe が作成されるので、これを使用する ■プログラムを作成(Yahoo検索を自動化) test.php
<?php require_once 'vendor/autoload.php'; use Facebook\WebDriver\Chrome\ChromeDriver; use Facebook\WebDriver\WebDriverBy; use Facebook\WebDriver\WebDriverExpectedCondition; // Chromeドライバを環境変数に設定 putenv('webdriver.chrome.driver=./chromedriver.exe'); // ブラウザを起動 $driver = ChromeDriver::start(); // 遷移 $driver->get('https://www.yahoo.co.jp/'); // テキストボックス入力 $driver->findElement(WebDriverBy::name('p'))->sendKeys('自動テスト'); // ボタン押下 $driver->findElement(WebDriverBy::className('_63Ie6douiF2dG_ihlFTen'))->click(); // タイトルが「検索結果」を含むものになるまで待つ $driver->wait()->until(WebDriverExpectedCondition::titleContains('検索結果')); // テキストを取得 $text = $driver->findElement(WebDriverBy::name('p'))->getAttribute('value'); // 結果を出力 echo 'TEXT:' . $text . "\n"; // ブラウザを閉じる $driver->close();
■プログラムを実行
php test.php
ブラウザが起動して処理され、完了すると以下のように結果が表示される
DevTools listening on ws://127.0.0.1:60771/devtools/browser/73b424e0-592c-4b07-ae4e-024847f68b22 TEXT:自動テスト
上記手順により「php」だけでPHPを起動できるはずだが、 起動できない場合はWindowsの環境変数の「Path」に以下を追加しておく C:\xampp\php もしくは以下のように、パス込みで実行する
C:\xampp\php\php.exe test.php
■エラー 以下のようなエラーが表示される場合、Chromeのバージョンアップに伴いドライバが利用できなくなっている バージョンに合ったドライバを、改めてダウンロードする
PHP Fatal error: Uncaught Facebook\WebDriver\Exception\SessionNotCreatedException: session not created: This version of ChromeDriver only supports Chrome version 101 Current browser version is 105.0.5195.127 with binary path C:\Program Files (x86)\Google\Chrome\Application\chrome.exe
■その他メモ テスト実行時、以下のエラーが表示されることがあった
[5936:10116:0120/133404.194:ERROR:device_event_log_impl.cc(211)] [13:34:04.193] USB: usb_device_handle_win.cc:1020 Failed to read descriptor from node connection: システムに接続されたデバイスが機能していません。 (0x1F) [5936:10116:0120/133404.194:ERROR:device_event_log_impl.cc(211)] [13:34:04.194] USB: usb_device_handle_win.cc:1020 Failed to read descriptor from node connection: システムに接続されたデバイスが機能していません。 (0x1F)
以下のページを参照する限り無視して良さそうだが、また対策は考えたい Seleniumを使用しPythonでWebページのタイトルを取得する | 中小企業のIT相談窓口「Soo_Daaan」 - 論理的思考/課題解決/プログラミング https://laboratory.kazuuu.net/get-web-page-titles-in-python-using-selenium/

Advertisement