Seleniumを使うためには、WebDriverが必要ですが、ブラウザのバージョンと合っていないとエラーになってしまいます。どちらかが新しくてもだめです。
This version of ChromeDriver only supports Chrome version 90
Current browser version is 92.0.4515.15989.0.4389.128
自分でバージョンを調べて、ダウンロードしてもいいのですが、とっても面倒ですし、自動で動かしているものが突然動かなくなってしまうのはよくないです。
ということで、勝手にチェックしてインストールしてくれるようにコードを書いてしまいましょう。
常にDriverとChromeのバージョンを合わせる
常にDriverとChromeのバージョンを合わせるためには、 webdrivers (webdrivers(RubyGems.org))
を使います。このgemは、バージョンがあってなかったらドライバーをダウンロードしてくれる便利なものです。
さらに、WebDriverを最初にインストールしておく必要もなく、なかったら勝手にインストールしてくれます。
require 'webdrivers'
install_dir = ENV["USERPROFILE"] + '/webdrivers'
install_dir.gsub!("\\","/")
Webdrivers.install_dir = install_dir
注意としては、ディレクトリの切れ目のパス区切り文字は、 "/" になります。 ENV で環境変数をとってくるとパス区切り文字は、 "\" になってしまうと思いますので、 gsub! で変換してます。
webdriversを使ったSeleniumの例
Googleに接続して検索結果を取得する例です。
require 'webdrivers'
require 'selenium-webdriver'
# Webdrivers.logger.level = :DEBUG # debugする場合
install_dir = ENV["USERPROFILE"] + '/webdrivers'
install_dir.gsub!("\\","/")
Webdrivers.install_dir = install_dir
driver = Selenium::WebDriver.for :chrome
wait = Selenium::WebDriver::Wait.new(timeout: 10)
begin
driver.get 'https://www.google.com/'
driver.find_element(name: 'q').send_keys 'gogotorotan', :return
first_result = wait.until{ driver.find_element(css: 'h3') }
puts first_result.attribute('textContent')
ensure
driver.quit
end
システムに接続されたデバイスが機能していません。のエラーは問題ない
下記エラーが発生しますが、特に問題ないと思われます。ちょっときもちわるいですが。
DevTools listening on ws://127.0.0.1:12345/devtools/browser/0321d1e4-ae2d-2a94-bd1a-edc764445954
[17332:13448:0703/234006.612:ERROR:device_event_log_impl.cc(214)] [19:10:06.613] USB: usb_device_handle_win.cc:1058 Failed to read descriptor from node connection: システムに接続されたデバイスが機能していません。 (0x1F)
下記参照のリンクを見ていただければ良いと思いますが、省電力モードで待機されているUSBデバイスのプロパティをChromeが読み取ろうとしているらしいです。
ちなみに、Pythonなら webdriver_manager になります。
参考:
- Downloads - ChromeDriver - WebDriver for Chrome
- ChromeDriver - WebDriver for Chrome
- Chromeの安定最新バージョンに合わせてChrome Driverの最新バージョンを取得する方法 DevelopersIO
- Seleniumを使用しPythonでWebページのタイトルを取得する
- python - USB: usb_device_handle_win.cc:1020 Failed to read descriptor from node connection error with ChromeDriver v87 / Chrome v87 using Selenium on Windows10 - Stack Overflow
2021/11/09