ElectronでSelenuimを使う

前書き

Seleniumを使ってウェブの自動巡回ツールをよく作るが、Electronのwebviewで同じようなことができないかとチャレンジしてみた。
結論としてElectronのwebviewとデータをやり取りするためにIPCを使うが、IPCはDOMオブジェクトを送れないことがわかったので却下。
せっかくなのでElectronからSeleniumを使い始めるまでのチュートリアルをここに残す。

なお、基本的な手順はElectron公式のWikiに倣うが、あちらは「SeleniumでElectronのテストをすること」を目的としている。こちらは「ElectronからSeleniumを使うこと」を目的としている。

1.Electoronのプロジェクトを作成する

クイックスタートに従ってレポジトリのクローンを行う

# Clone this repository
git clone https://github.com/electron/electron-quick-start
# Go into the repository
cd electron-quick-start
# Install dependencies
npm install

2.chromedriverのダウンロード

http://chromedriver.storage.googleapis.com/index.html
こちらより最新のバージョンでプラットフォームに合ったものをダウンロードする。
2016年11月25日時点で最新のバージョンは2.25
ダウンロードしたファイルを展開し、1で作ったプロジェクトのディレクトリにコピーする。

3.WebDriverJSのインストール

Node.jsからSeleniumを制御するためのselenium-webdriverをインストールする。

# npm install --save selenium-webdriver

4.Seleniumの処理

main.jscreateWindow 関数にSeleniumを起動する処理を追加する

function createWindow () {
  ...

  var webdriver = require('selenium-webdriver'),
  By = webdriver.By,

  var driver = new webdriver.Builder()
      .forBrowser('chrome')
      .build();

  driver.get('http://www.google.com/ncr');
  driver.findElement(By.name('q')).sendKeys('webdriver');
  driver.findElement(By.name('btnG')).click();

  ...
}

5.動作確認

アプリケーションを起動してみる。

# npm start

起動してすぐにChromeが起動して、”webdriver”の検索結果が表示されたら成功。

webdriver

6.Enjoy!!

あとはselenium-webdriverのドキュメントに従ってコードを書くだけ。