メモ > 技術 > 開発: 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/
2024年10月時点では、以下のページから「Stable」の「chromedriver」の「win64」をダウンロードした(「chrome」ではなく「chromedriver」が必要)
https://googlechromelabs.github.io/chrome-for-testing/
※マイナーバージョンは差があっても問題ないみたい。
「91.0.4472.114」のときは「ChromeDriver 91.0.4472.101」で動作した。
■プログラムを作成(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/