Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

概要

  • 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」という画像ファイルが入っていると思います。
開いてみると、時刻入りの画像が表示されます。

takepan
PC-8001の産湯をつかい、姓は車、名は寅次郎 人呼んでtakepanと発します
yyphp
PHPerが毎週集まり、ざっくばらんに情報交換する雑談コミュニティ
https://yyphp.connpass.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away