ところでウェブドライバーってウェブダイバーに似てるよな。
 ちなみにApache HttpClientは馬鹿正直というか、オレオレ署名対応とか古いTLS1.0対応とかまずSSL接続をする段階で何かと喧しくて面倒なのでスルー。
 それにしてもちょっと社内システムから情報引っ張るのにHTTPクライアントでアクセスしてHTMLを解析パースするのって如何なものかと思うんだが、そんなに本格的必要不可欠システムでもないのでまさかポート1521開けてくれとも言いづらいし、我々がちょっと使うためだけに向こうにSOAPだかRESTだかとにかく80あるいは443で通信する口を作ってテストして責任もって保守を続けてくれ、とも言いにくい。SOA! SOA!
 まぁHTMLパースはHTMLCleaner掛けてしまえばただのXMLなので楽ちんなんだけど、社内システムはログインが結構面倒で結局seleniumなどという無駄に重いものを使わざるを得なくなった。いやまだできたわけではないが多分できる筈。そもそもselenium使った事ないけどな。まぁネットで見た限りではそんなに難しいものでもなさそうだし。
 この類は、Oracle ATSが結構使いやすいんだがあれも相当なスペックのハードを準備しないといけないからな。OracleはやたらOracle Database+Fusion Middlewareで実装するのでちょっとしたツールでもたちまちエンタープライズシステム並みのハードが必要になる。というか高いし。
 それにしてもivyでseleniumを入れると物凄い量のjarが入るな…。なんでguavaやjettyまで…。

package seleniumtest;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class Main {

	public static void main(String[] args) {
		Main my = new Main();
		my.exec(args);
	}
	
	private void exec(String[] args){
		System.setProperty("webdriver.gecko.driver","./driver/geckodriver.exe");
		WebDriver driver = new FirefoxDriver();
		driver.get("http://nekora.main.jp/");
		
		// driver.close(); //firefoxを閉じる
	}
}

ivyで勝手に入るjarの他に、https://github.com/mozilla/geckodriver/releases から別途DLしたzipを解凍して geckodriver.exe をどこかに置いて、それをシステムプロパティで指定することが必要だった。
https://stackoverflow.com/questions/19953865/why-there-is-no-need-of-external-firefox-driver-like-ie-and-chrome-in-selenium2
には、firefoxドライバだけはこういうことは不要と書いてあるんだが…。
ちなみに入れないと以下のエラー

Exception in thread "main" java.lang.IllegalStateException: The path to the driver executable must be set by the webdriver.gecko.driver system property; for more information, see https://github.com/mozilla/geckodriver. The latest version can be downloaded from https://github.com/mozilla/geckodriver/releases
	at com.google.common.base.Preconditions.checkState(Preconditions.java:738)
	at org.openqa.selenium.remote.service.DriverService.findExecutable(DriverService.java:124)
	at org.openqa.selenium.firefox.GeckoDriverService.access$100(GeckoDriverService.java:41)
	at org.openqa.selenium.firefox.GeckoDriverService$Builder.findDefaultExecutable(GeckoDriverService.java:115)
	at org.openqa.selenium.remote.service.DriverService$Builder.build(DriverService.java:330)
	at org.openqa.selenium.firefox.FirefoxDriver.toExecutor(FirefoxDriver.java:207)
	at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:108)
	at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:104)
(略)

何か、「firefox用ドライバはjarに含まれているよ」的な指示をどこかに入れれば実はexeは不要なのかも知れない。


それにしても、こういうのばかりは、何かPythonなりRubyなりPerlなりのスクリプト言語の方が向いている気がする…。ただどれも不得手というかRubyに至っては起動方法すら知らぬのでとりあえずJavaでやるが。Javaなら一応文法は分かるからな。あとスクリプト言語はOS領域にライブラリを入れる事が多いので意外に導入へのハードルが高い。その点Javaはクラスパスで個別に管理できて意外に便利。