こんにちは、おかちゃんせんせいです!
昨日作成したマクロを実行しようとしましたら、今まで発生したことのないエラーが突然発生!?
約3時間ネットで調べてもピンポイントの回答はなく、一時的な情報になりそうですが、同様のケースが起きた際にも役に立つと思ったので記事にすることにしました。
目次
ChromeとChromeDriverのバージョンは合っているはずなのにエラー
以前Webスクレイピングを行い、Chrome上でのWebデータをExcelに転記する方法についての記事を書きました。
【業務効率化】Windows版Excel VBAでChromeを自動操作して、Webスクレイピングする方法(初期設定編) 【業務効率化】Windows版Excel VBAでChromeを自動操作して、Webスクレイピングする方法(WebデータをExcelに転記する)今回は、Seleniumで指定したURLを開く処理(driver.Get (siteURL))で下記エラーが発生。
今まで発生したことのないエラーで、しかも原因がわからないUnknownError。
ググっても当然エラーの原因はわからずじまい。
ChromeとChromeDriverのバージョン不一致によるエラーは度々起こりますが、今回のエラーは調べても原因不明でした。
一時的な解決策としてbeta版の104にバージョンアップ
もしかしたら、バージョン103が不具合を起こしているかもしれないので、解決策として考えれるアプローチは2つ。
バージョンダウンかバージョンアップ。
バージョンアップの場合はbeta版になってしまいますが、できればバージョンを下げたくないので、beta版を試してみることに。
上記サイトからファイルをダウンロードして、インストールします。
すると、WindowsであればC:/Program Files/Google/Chrome Beta/Application/にchrome.exeが保存されます。
コードの修正
通常新しいバージョンのブラウザをインストールすれば、普通にブラウザを起動するとバージョンアップの内容が更新されます。
しかし、beta版の場合は別フォルダに作成されるため、マクロを起動しても以前のバージョンのChromeが立ち上がってしまい、まだエラーを回避することはできていません。
そこで下記コードを追加します。
‘ Chromeの場所を指定
driver.SetBinary (“C:/Program Files/Google/Chrome Beta/Application/chrome.exe”)
以上のことを踏まえて、サンプルコードはこんな感じになります。
Sub test()
'変数:driver でSelenium制御
Dim driver As New Selenium.ChromeDriver
'ByクラスはSelenium独自搭載のクラス
Dim myBy As New By
'初期起動時に開くURL
Dim siteURL As String
'Selenium利用時、ウィンドウサイズを最大化で開く初期設定
driver.AddArgument "disable-gpu"
driver.AddArgument "start-maximized"
' Chromeの場所を指定
driver.SetBinary ("C:/Program Files/Google/Chrome Beta/Application/chrome.exe")
'SeleniumでChromeを使用する初期設定
Call driver.Start("chrome")
'指定のURLに移動する
siteURL="https://www.yahoo.co.jp"
driver.Get (siteURL)
'Excelに転記する
For i = 1 To 8
Range("A" & (i+1)) = driver.FindElementByXPath("//*[@id=““tabpanelTopics1””]/div/div[1]/ul/li[" & i & "]/article/a/div/div/h1/span”).Text
Next i
End Sub
ただし、注意点としてはこのコードを追加すると、今後も必ずbeta版が起動されてしまいます。
今回のコードは一時的な打開策です。
もし再びバージョンアップした際には、コメントアウトしておくと良いです!
- ChromeとChromeDriverのバージョンを一致させてもエラーが出てしまう場合には、beta版をインストールしてみる。
- beta版はインストールするだけでは通常起動時に立ち上がらないため、コードで起動するブラウザを指定する必要がある。