LoginSignup
8
9

More than 5 years have passed since last update.

プログラムでブラウザを動かす環境を、30分で作る。 Windows編

Posted at

概要

  • Windows
  • Selenium
  • PHP
  • facebook/php-webdriver
  • Google Chrome
  • ヘッドレス

前提条件

Google Chromeの最新版が動作していること


最初にダウンロードから

  1. seleniumフォルダーを作ってそこに全部入れていくと吉
  2. Java9
    • 376MBと大きいので時間がかかるぞ。
  3. selenium-server
    • seleniumフォルダーに直接ダウンロードするだけ。
  4. PHP for Windows

    • Windowsが64bitならx64、32bitならx86。
    • Thread Safeがオススメ。
    • バージョンは一番上のものを選ぼう。
  5. Chrome Driverの最新版をダウンロード。

    • 解凍して、Windows版のドライバをseleniumフォルダーにコピーする。win32しかないので注意。

構築手順

  1. ダウンロードした Java9 の .exe ファイルを実行する。
  2. インストールが完了したら「コマンド プロンプト」を開いて、
> java --version

してみよう。
image.png
こんな感じになればOK。

  1. ダウンロードしたPHP for Windowsを解凍する。
  2. composerのサイトにアクセスする。
  3. Windows InstallerのComposer-Setup.exeのリンクをクリックする。
  4. ダウンロードしたら開き、インストールする。
  5. PHPの実行ファイルを探してきてくれる。便利。

image.png


構築手順2(PHPとSelenium Server)

  1. 解凍したPHP for Windowsのディレクトリのphp.iniで、 php_curl.dll を有効化する(先頭のセミコロンを取り除く)
;extension=php_bz2.dll
extension=php_curl.dll
;extension=php_fileinfo.dll
  1. composerでfacebook/php-webdriverをインストール
> cd c:\selenium
> composer require --dev facebook/webdriver
  1. selenium-serverを起動する

(例)

> cd c:\selenium
> java -jar selenium-server-standalone-3.4.0.jar &   

いざ実行!

  1. php-webdriverの本家サイトサンプルプログラム をコピーして、seleniumフォルダーに example.php として保存しよう。
  2. [コマンド プロンプト]を起動して、実行してみよう。
> cd c:\selenium
> php -f example.php

Chromeが起動して、いくつかのサイトが表示された後に、Chromeのウィンドウが消えたでしょうか。なんか動いてる感じはするものの、すぐに消えてしまうので、スクリーンショットとして画像を残すプログラムを書き加えます。

// takeScreenshot
$screenshot = __DIR__ . "/php.png";
$driver->takeScreenshot($screenshot);

これで実行すると、Chromeが起動して消えた後に、seleniumフォルダーに「php.png」という画像が作られているはずなので、ダブルクリックして開いてみてください。
「php」でGoogle検索された画像が表示されたでしょうか?成功です!


ヘッドレスモードを試してみる

  • ヘッドレスは、ブラウザを起動しないモードです。
  • 昨年夏から秋にかけて、ChromeやFireFoxにモードが実装されました。
  • ブラウザを特に起動せずに、テストやスクリーンショット撮りをしたいときに便利です。

  • nictというサイト(日本標準時を配信している)のスクリーンショットを、ブラウザを起動せずに取得します。


<?php

require_once './vendor/autoload.php';

use Facebook\WebDriver\Remote\RemoteWebDriver;
use Facebook\WebDriver\Chrome\ChromeOptions;
use Facebook\WebDriver\Remote\DesiredCapabilities;

// nict site
$url = 'http://www.nict.go.jp/JST/JST.html';

// selenium server
$host = 'http://localhost:4444/wd/hub';

$options = new ChromeOptions();
$options->addArguments(array(
  '--headless',      // ヘッドレスモードを使用したい場合
));

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

// chrome ドライバーの起動
$driver = RemoteWebDriver::create($host, $caps);

// navigate to nict
$driver->get($url);

// takeScreenshot
$file = __DIR__ . '/nict.png';
$driver->takeScreenshot($file);

// close the browser
$driver->close();

実行してみると、特にブラウザが起動せずに、seleniumフォルダーに「nict.png」という画像ファイルが入っていると思います。
開いてみると、時刻入りの画像が表示されます。

8
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9