ラボ > PHP:Composer、selenium(セレニウム)

PHP、セレニウムを使ってみる

ブラウザを起動してゴニョゴニョするってヤツ。Composer必須っぽい。

作成日:2018-11-13, 更新日:2019-05-08

経緯

1.form投稿~登録情報の修正のテストを行う必要があった。
2.数をこなすのが面倒・・・「selenium(セレニウム)」ってヤツがプログラムで良い感じにやってくれるというお話を聞いた
3.PHP+XAMPPで可能ってコトで調べてみることに

条件・環境

・Win10、Xampp環境

必要なヤツら

「selenium(セレニウム)」をPHPで実行するには・・・
・Composerが必要
・Webドライバも必要:php-webdriver(作:Facebook / facebook/php-webdriver
・ChromeDriverも必要(※他のブラウザを使いたいなら、そのドライバを探す)

作業の流れ

ひとまず、ブラウザを起動するトコまで。
1.Composer自体のインスト(インスト済みならスキップ)
2.ComposerからWebドライバをインスト
3.ChromeDriverのインスト
4.テスト:ひとまずChromeを起動させる

Composer自体のインスト

1.ComposerをDL
2.インスト
※環境変数にcomposerが追加される。

ComposerからWebドライバをインスト

適当なフォルダを作ってjsonファイルを作る。

1.ひとまず下記のようなディレクトリ(/selenium)を準備

C:\xampp\htdocs\selenium

2.cmdでカレントディレクトリを「C:\xampp\htdocs\selenium」に移してインスト。

# cd C:\xampp\htdocs\selenium\
# curl -sS https://getcomposer.org/installer | php
# php composer.phar require facebook/webdriver

※しばらく待つと「C:\xampp\htdocs\selenium」の中に「composer.json」や「/vendor」とかが作られる。
※curlのトコで「composer.phar」をダウンロードする

ChromeDriverのインスト

ChromeDriver - WebDriver for Chrome」からダウンロード。
※Win環境なので「chromedriver_win32.zip」をDL

解凍して「chromedriver.exe」を「C:\xampp\htdocs\selenium\bin」の中に移動。

テスト:ひとまずChromeを起動させる

▼実行元のPHPファイルを作成:C:\xampp\htdocs\selenium\test.php

<?php
require_once __DIR__ . '/vendor/autoload.php';
use Facebook\WebDriver\Chrome\ChromeDriver;
use Facebook\WebDriver\WebDriverBy;
use Facebook\WebDriver\WebDriverExpectedCondition;

function makeChrom() {
  // 環境変数にChromeドライバをセット
  putenv('webdriver.chrome.driver=' . __DIR__ . '\bin\chromedriver.exe');
  
  // ブラウザ起動
  return ChromeDriver::start();
}

$driver = makeChrom();

▼ブラウザを起動させるためにPHPをCMDから実行

# php test.php

ひとまずブラウザが起動すればOK。
プログラムが「ブラウザを開く」しか無いので、開いたらプログラムは終了→起動してブラウザは終了される

エラー

▼ブラウザは起動してくれたけど・・・エラーが出てきた

[4760:10896:1113/144753.207:ERROR:persistent_memory_allocator.cc(845)] Corruption detected in shared-memory segment.

Chromeは終了させておく必要があるそうだ・・・。
Chromeを終了させて、再実行するも変わらず。
何度か試していたら・・・いつのまにかエラーは解消されていた。

Chromeじゃなく、Firefoxのドライバで試してみたけど・・・「FirefoxDriver.php」の中身がほぼ空・・・。
→動作せず。

▼Firefoxのドライバ:geckodriver.exe
geckodriver

PATH

最初(ComposerからWebドライバをインストする前)

■C:\xampp\htdocs\selenium
└bin\
※後でもいいんだけど、「bin」フォルダを先に作っておく。

ComposerからWebドライバをインストした後

■C:\xampp\htdocs\selenium
├bin\
├vendor\
│├composer\
│├facebook\
│├symfony\
│└autoload.php
├composer.lock
└composer.json

ChromeDriverのインストした後

インストというか・・・DLしたファイルを移動させただけ。
■C:\xampp\htdocs\selenium
├bin\
│└chromedriver.exe
├vendor\
│├composer\
│├facebook\
│├symfony\
│└autoload.php
├composer.lock
└composer.json

「テスト:ひとまずChromeを起動させる」のファイルを置いた後

■C:\xampp\htdocs\selenium
├bin\
│└chromedriver.exe
├vendor\
│├composer\
│├facebook\
│├symfony\
│└autoload.php
├composer.lock
├composer.json
└test.php

▼cmdで実行

# php test.php

※PHPのPATHが通っており、カレントは「C:\xampp\htdocs\selenium」に移したあとに実行。