WindowsでJenkinsとWebDriverを動かそうとしてハマった
WindowsにJenkinsを入れて、WebDriverでスクレイピングしようとしてハマったときのログ。WindowsだとJenkinsをサービスとして登録すると、ジョブ動かしてブラウザ開けないんですね。知らなかった。
やりたかったこと
定期的にチェックしているWebページがあるんですが、そこを毎日見に行くのが面倒なので、WebDriverで定期巡回させて、チェックしたい項目をテキストに書きだそうと思いました。
そこでJenkinsをインストーラーで入れて、ジョブを作成。巡回用のWebDriverスクリプトをキックしてみると、よくわからないエラーが出て動きません。
問題点
ジョブを実行すると以下の様なエラーが発生します。
C:\Program Files (x86)\Jenkins\jobs\GetPageInfo\workspace>rspec C:\Selenium\get_page_info.rb Started ChromeDriver port=9515 version=22.0.1203.0b log=C:\Program Files (x86)\Jenkins\jobs\GetPageInfo\workspace\chromedriver.log [1029/122515:ERROR:proxy_launcher.cc(551)] Failed to wait for testing channel presence. d:\src\chr0\src\chrome\test\automation\proxy_launcher.cc(478): error: Value of: automation_proxy_.get() Actual: false Expected: true</pre> An error occurred in an after hook NoMethodError: undefined method `quit' for nil:NilClass occurred at C:/Selenium/get_page_info.rb:88:in `block (2 levels) in ' F Failures: 1) Get Page Information Failure/Error: @driver = Selenium::WebDriver.for :chrome Errno::ECONNREFUSED: No connection could be made because the target machine actively refused it. - connect(2) # C:/Selenium/get_page_info.rb:10:in `block (2 levels) in ' Finished in 46.64 seconds 1 example, 1 failure
@driver = Selenium::WebDriver.for :chrome
はブラウザが起動される部分で、そこでコネクション拒否(ECONNREFUSED)されているみたいです。
対策案
この問題についてはWindows上のSeleniumからWebDriverで定期的にブラウザを立ち上げるで解説されています。
Windowsではサービスとしてcronなどのdaemonを起動させると、そのプロセスからはGUIアプリケーションを立ちあげて動作させることが出来ない制約があります。
なるほど。勉強になりました。
サービスは使えないということなので、サービス登録せず、Javaコマンドを使ってJenkinsを起動するようにしたら、元気にWebDriverが動きました。