LoginSignup
12
9

More than 5 years have passed since last update.

CapybaraからSeleniumを通してPhantomJSを使ってみる

Posted at

概要

CapybaraからPhantomJSと言えばCapybara用のPhantomJSドライバのPoltergeistなのですが、
SeleniumからもPhantomJSを使えるので、CapybaraからSeleniumを通してPhantomJSを動かしてみました。
別のマシンでPhantomJSを動かすときに有用ではないでしょうか。

PhantomJSとは

PhantomJS はヘッドレスな(ブラウザ画面のない)QtWebKit ベースのブラウザで、JavaScript の API を通じて、そのブラウザを自由自在にあやつることが出来ます。使用シーンとしては、Jenkins などの CI ツールとの組み合わせによる Web ページの GUI の自動テストや、Web ページのスクリーンキャプチャ、スクレイピングなどが挙げられます。

PhantomJS でログインが必要なページでも自由自在にスクレイピング - 凹みTips

仕様

PhantomJSをSeleniumから使う場合には、リモートで起動しているPhantomJSに対して操作をする必要があるので、
PhantomJSサーバが起動してない場合には、別プロセスとしてPhantomJSのサーバを起動しています。
起動したリモートサーバに対してCapybara-Seleniumから操作を送っています。

実装

PhantomJSが起動している環境で動作させる場合

phantomjs-use-remote.rb
require 'capybara'
require 'selenium-webdriver'
require 'capybara-webkit'

port = 8910
host = 'localhost'

Capybara.register_driver :phantomjs do |app|
  Capybara::Selenium::Driver.new(app, browser: :remote, url: "http://#{host}:#{port}")
end

browser = Capybara::Session.new(:phantomjs)

browser.visit 'http://qiita.com/'
browser.save_screenshot 'screenshot.png'

PhantomJSが起動していない環境で動作させる場合

phantomjs-stand-alone.rb
require 'capybara'
require 'selenium-webdriver'
require 'capybara-webkit'

port = 8910
host = 'localhost'

sleep_time = 2

# phantomjsのリモートサーバを別プロセスで起動
pid = spawn 'phantomjs', '-w', port.to_s, :out => '/dev/null'
sleep sleep_time

Capybara.register_driver :phantomjs do |app|
  Capybara::Selenium::Driver.new(app, browser: :remote, url: "http://#{host}:#{port}")
end

browser = Capybara::Session.new(:phantomjs)

browser.visit 'http://qiita.com/'
browser.save_screenshot 'screenshot.png'

# phantomjsのリモートサーバを終了
Process.kill 'KILL', pid

まとめ

ローカルで動作させるのであれば、Poltergeistを使った方がトリッキーなことをしなくて良さそうです。
Capybara資産を使ってリモートのサーバのPhantomJSを操作するときに有効かも。

ライセンス

こちらのコードはMITライセンスです。

12
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
12
9