2018.10.16 Tue

【Webブラウザの自動操作を使って、単純作業を効率化】Seleniumの実装方法について


みなさん、こんにちは。
ジーニアスウェブの平です。

先日、宮崎の綾町にある照葉大吊橋に行こうと車を走らせていたのですが、ナビ通りに進んだ結果、山奥のかなり昔から使われていない通行止めの道に着きました。今年ナビの更新をしたばかりだったので驚きました。非常に残念ではありましたが、帰ろうとしていると近くに大きなダムがあることに気づきました。広沢ダムという名前なのですが、普段ダムを見る機会もなかったのでその壮大な光景に興奮しました。目的は達成できませんでしたが、思わぬ発見で少し満足できました。


さて、今回は単純作業を効率化したい時に最適なSeleniumについてご紹介させていただきます。
業務の効率化を考える際、日常の単純作業を少しでも補ってくれるプログラムがあると助かります。
SeleniumはWebブラウザを自動操作出来るツールです。Seleniumでは特定のタグを取得することやブラウザ上でのテキストの入力、出力されたログの取得などの操作を自動で行うことが出来るため、Webサイトの動作のテストやチェック作業などが効率的に行えます。

実装環境

ブラウザ Chrome ※1
開発言語 PHP(インストール済み)※2
OS MacOS High Sierra 10.13.6

※1この他、firefox、safari、IE11、Edgeが使用できるようです。
※2この他、Ruby、Python、JAVA、C#、Node.jsが使用できるようです。

Selenium-WebDriverのダウンロード

Selenium-webDriverサイトからChromeブラウザ用のWebDriverをダウンロードします。
WebDriverとはサイトのページ内の構造を解釈するツールです。ChromeDriverに接続して、そこからChromeを操作する、という流れになります。

ChromeDriverのダウンロードサイト

Selenium-Serverのインストール

WebDriverを自動動作させるためにSelenium-serverをダウンロードします。

$ sudo wget http://selenium-release.storage.googleapis.com/3.14/selenium-server-standalone-3.14.0.jar

php-webdriverのインストール

公式ではphpでSeleniumを動かすドライバーがないため、facebookの方が作ったphp-webdriverをインストールします。
※今回のインストールにはcomposerを利用しています。

$ php composer.phar require facebook/webdriver

ディレクトリ内は以下のようになります。

$ ls
composer.json composer.phar
vendor composer.lock
selenium-server-standalone-3.14.0.jar

サンプル

グーグルにテキストを入力して検索し、検索結果のタイトルが検索した文字と該当していた場合、キャプチャーを取得するプログラムを作りました。
今回はヘッドレスで動作するように設定しました。特に画面を見る必要のない単純作業などの場合は、ヘッドレスに設定しておくことをお勧めします。

<?php require './vendor/autoload.php';

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

$options = new ChromeOptions();
$options->addArguments(['--headless']);
$host = 'http://localhost:4444/wd/hub';
$capabilities = Facebook\WebDriver\Remote\DesiredCapabilities::chrome();
$capabilities->setCapability(ChromeOptions::CAPABILITY, $options);
$driver = Facebook\WebDriver\Remote\RemoteWebDriver::create($host, $capabilities);
$driver->get('https://www.google.co.jp/');
$browserLogs = $driver->manage()->getLog('browser');
$element = $driver->findElement(WebDriverBy::name('q'));
$element->sendKeys('ジーニアスウェブ');
$element->submit();
$driver->wait(15)->until(
    WebDriverExpectedCondition::titleIs('ジーニアスウェブ - Google 検索')
);
if ($driver->getTitle() !== 'ジーニアスウェブ - Google 検索') {
    throw new Exception('fail');
}
$file = "サンプル_chrome.png";
$driver->takeScreenshot($file);
$driver->close();

下記はサンプルを実行してキャプチャーした画像です。

まとめ

今回はseleniumの実装について紹介させていただきました。一度環境を構築すれば、様々な自動化プログラムを複数作成するさせることができます。
皆さんも業務や日常の生活で自動化させたいことがある際はぜひお使いください。

WRITERこの記事を書いた人

伊藤

FREE DOWNLOAD

顧客獲得に成功した24社の成功事例を1冊にまとめました。
顧客獲得にお困りの方も、そうでない方も、一度お読みいただくことをお勧めします。

MORE VIEW