WebDriverManagerで最新のWebDriverを自動ダウンロードする(Selenium+ChromeDriver)
Selenium で WEB を自動操作する際に使う WebDriver の話。
僕は Chrome 向けの ChromeDriver を使っているわけですが、昔の Ver 2.36 とかの頃は Chrome のバージョンチェックがいい加減で、記憶が確かならもうかれこれ1年以上は WebDriver の更新を要求されなかったんですが、久しぶりに新バージョン(ver 73~75)を検証してみたらバージョンチェックが厳格になっており、ドライバが対応しているバージョンから直近3バージョンの Chrome でしか使えなくなってたんですね。
ってことで、インストール済み Chrome に合ったバージョンの WebDriver を自動ダウンロードする方法を探したよ、という話です。
具体的には Java + WebDriverManager が便利、って話ですな。今さらなんですが。
WebDriverManagerの使い方
WebDriverManager はここからダウンロード。
丁寧なドキュメントが用意されているので詳細はそっちを読んだらいいと思うんだけども、メモ代わりにサンプルコードとかも載っけとく。
使い方としては CLI から呼び出す fat-jar と、Maven や Gradle で dependency を書くとかして Java から呼び出す使い方、あと、どうやらサーバーモードなんかもあるご様子。
今回はサーバーモードについては触れません。
WebDriverManagerのfat-jarの使い方
fat-jar はREADME に書かれているリンクからダウンロードするか、書かれている方法で build しても良い。
使い方はコマンドラインからこんな感じで。
java -jar webdrivermanager-3.6.0-fat.jar chrome
これでコマンド実行時のカレントディレクトリに、インストール済み chrome のバージョンに合った chromedriver.exe が自動ダウンロードされる。
こんだけ。超簡単。
そして、下みたくシステムプロパティ「wdm.targetPath」を指定すれば、CLI からでもダウンロード先ディレクトリを指定できる。
java -Dwdm.targetPath=./test -jar webdrivermanager-3.6.0-fat.jar chrome
ただ、このやり方だと WebDriver をいちいち毎回ダウンロードし直しているご様子。キャッシュがまるで効いてなくてスマートじゃない、ってことで、次の方法の方がいいかなー。と思ってる。
WebDriverManager API の使い方
README によると CLI からでも細かな設定が出来るって話なんだけど、色んなオプションを試してもさっぱりキャッシュが効いてくれないので、Java から API を叩くことにした。これだとちゃんとキャッシュが効く。
Maven の dependency はこんな感じ。
<dependencies> <dependency> <groupId>io.github.bonigarcia</groupId> <artifactId>webdrivermanager</artifactId> <version>3.6.0</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-chrome-driver</artifactId> <version>3.141.59</version> </dependency> </dependencies>
で、Javaのコードはこんな感じ。
import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import io.github.bonigarcia.wdm.WebDriverManager; import org.openqa.selenium.chrome.ChromeOptions; public class WebDriverManagerChrome { public static void main(String args[]){ WebDriverManager.chromedriver().setup(); ChromeOptions options = new ChromeOptions(); options.addArguments("--headless", "--disable-gpu", "--window-size=1920,1080","-ignore-certificate-errors"); WebDriver driver = new ChromeDriver(options); driver.get("http://www.google.com/"); System.out.println(driver.getTitle()); driver.quit(); } }
--headless で Chrome のヘッドレスモードに。
--disable-gpu は Windows では指定した方がいいとか。
実行したらコンソールに Google と表示されれば成功。
どの程度の信頼性のシステムで使うかにもよるんだけども、
そんな感じです。