個人開発でseleniumを利用しているのだが、Chromeが頻繁に更新されるので、手動更新がめんどくさくなった。
自動更新の仕方を調べ、実際にコーディングし、意図する結果になっているので、整理しておく。
※多少雑だが個人的備忘なのでご了承ください。
なおPythonの記事は以下で記載しているので参考まで。
環境情報
- Java8
- Gradle6.7.1
- Windows 10
- eclipes photon
※なお対象のdriverはchromedriver
実装
- build.gradleに以下の記述を追加
dependencies {
implementation 'org.seleniumhq.selenium:selenium-java:3.12.0'
compile group: 'org.seleniumhq.selenium', name: 'selenium-chrome-driver', version: '3.12.0'//これ無くても動くかも
compile group: 'io.github.bonigarcia',name :'webdrivermanager',version:'5.2.0'
}
※seleniumの最新はもっと行っているはず(あと、implementation とcompileの差はわからない。調べてない。)
※記事執筆時点でのwebdrivermanagerの最新は5.2.0が最新のtags
FYI:https://github.com/bonigarcia/webdrivermanager
-
Refresh Gradle Projectを実行
-
環境に存在しているchromedriverを自動更新する
public void setupChromedriver(){
// 1. Auto installs
WebDriverManager.chromedriver().setup();
}
これで勝手に更新してくれる。
場所は、%HOMEPATH%.cache\selenium\chromedriver\win32以下にversionごとにフォルダができて、chromedriver.exeが存在しているはず。
seleniumuで自動テストなどを書いている場合は、実行の都度更新されていないとバージョン差異によって失敗するので、更新ロジックに続けでそのまま処理を書いる。
※そんなことしなくても大丈夫なはず。
- driverを利用してseleniumで起動、実行
public void setupChromedriver(){
// 1. Auto installs
WebDriverManager.chromedriver().setup();
}
public void execute(String url){
setupChromedriver();//呼び出してdriverを更新しておく
// 2. use the selenium with the driver
// headlessで実行したい場合はoptionsに「--headless」を詰めておく
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
// インスタンス生成(引数はなくても生成可能)
WebDriver driver = new ChromeDriver(options);
try {
// URL遷移
driver.get(url);
// BOMを取得する場合はWebElementのリスト型で取得できる
// この場合はclassで取得している
List<WebElement> webElements = driver.findElements(By.className("XXXXX"));
} catch (Exception e) {
e.printStackTrace();
} finally {
if (driver != null) {
//close ではなくquitにしないとPCのプロセスに残り続ける
driver.quit();
}
}
}
一応こんな感じで実行できることは確認できている。