Edge×Selenium×VBAでWebスクレイピング
Edge×Seleniumbasic×VBAでWebスクレイピングを検討されている方向けの記事です。
自身の経験談を記事にしました。
Seleniumbasic(セレニウムベーシック)のダウンロード、インストール、Edgeドライバーのセット完了。
いざ実行・・・してみましたが「実行時エラー0」が出てしまった方向けに解説を用意しました。
この状態ではSeleniumは動かないのでスクレイピングできません。困りました・・・。
Edgeのドライバーをインストール時に何か操作を間違えたかも?と考えてしまうのですが他に要因があります。
私いつもはChromeを使っています。
今回Edgeで環境構築した際に実行時エラー0が出てしまいました。
実はEdgeの方がひと手間多いです。環境構築時にやらないといけない事が1つ増えます。
Chromeでしか環境構築してない方は作業を知らない事が想定されます。
作業は簡単です。一緒に確認していきましょう。
ブラウザ側のバージョンアップによりEdgeドライバーの入れ替えが必要な方にも参考になる記事です。
関連記事
初期設定(環境構築)から簡単にコードを書く方法について解説しています。
ブラウザはChromeを使っていますが同様の方法で初期設定(環境構築)、コードが書けるようになります。
おすすめ書籍
Webスクレイピングは書籍で勉強しました。
- 初期設定をしっかり解説しています
- 関連のメソッドを分かりやすくリスト化してあります
エラーの原因:ドライバーの名前を変えてない
初期設定(環境構築)の時に各ブラウザーのドライバーをインストールします。
Edgeのドライバーをインストールした際はmsedgedriver.exeという名前が付いています。
これをそのままSeleniumbasicの環境に置いてコードを実行してもエラーになります。
先頭の文字からmsを消してedgedriver.exeにしてからSeleniumbasicの環境にセットしましょう。
Edgeドライバーをインストールする方法
まずはご自身が使用しているEdgeのバージョンを確認する必要があります。
画像とリストで手順を確認しEdgeのバージョンを確認してください。
番号 | 工程 | 内容 |
---|---|---|
1 | 「・・・」を押下 | 画面右上の・・・をクリック |
2 | 「設定」を押下 | 画面右中央やや下の設定をクリック |
3 | 「Microsoft Edge」についてを押下 | 画面左中央やや下のMicrosoft Edgeについてをクリック |
4 | バージョンの確認 | 画面中央からやや左上にバージョンの記載有り |
続いてEdgeドライバーをダウンロードします。
アクセスしていただくと最初の画面からやや下に最新バージョンという文字が出てきます。
この辺りにご自身のEdgeと同じバージョンの文字がないか確認して下さい。
(例)113.0.1774.3 というバージョンでOSがWindowsの時は以下画像の赤枠をクリック
ひとまずデスクトップにダウンロードしてください。
おそらくZipファイルがダウンロードされます。
展開(解凍)するとmsedgedriver.exeとDriver_Notesが居ます。
このmsedgedriverの名前を変更します。
先頭のmsを取ってedgedriver.exeにしてください。
EdgeドライバーをSeleniumの環境にセット
最後にedgedriver.exeを所定の場所にセットします。
Seleniumのインストール先がデフォルトの方は以下アドレスを確認ください。
C:\Users\ここは各ユーザー名\AppData\Local\SeleniumBasic
既存のedgedriver.exeと置き換えてください。
これで実行時エラー0の対策は完了です。
Chromeはそのまま使える
余談ですがChromeドライバーはリネーム(名前を変える)する必要はないです。
ChromeドライバーをダウンロードしてexeファイルをそのままSeleniumの環境に置いてください。
EdgeもChromeもプロパティやメソッドは同じ
EdgeでもChromeでも持っているプロパティやメソッドは同じでした。
まだEdgeでしっかりSeleniumを使えてないのですがおそらくChromeと同じことができます。
Edgeでgoogleにアクセスして検索窓にキーワードを入力し検索ボタンを押すというコードです。
検索した後はそのままブラウザをクローズしています。
Sub EdgeでGoogle検索()
Dim Driver As New EdgeDriver
Driver.Get "https://www.google.com"
Driver.FindElementByName("q").SendKeys ("VBA Webスクレイピング 初期設定")
Driver.Wait 1000
Driver.FindElementByName("btnK").Click
Driver.Close
Set Driver = Nothing
End Sub
さらに詳しいコードの書き方はこちらの記事で確認ください。
コードの書き方VBA×Selenium×ChromeでWebスクレイピング|nameタグを使う
コードの書き方VBA×Chrome/Edgeでスクレイピング|XPathとは?|動画で解説
マウスの操作を再現【selenium×VBA】右クリックを含めたマウス操作を再現
アウトプットの例を紹介
Excelのワークシート上にYahooのニューストピックスをハイパーリンク付きで抽出しています。
もちろん1クリックです。加えて再現性もあるので何度でもニューストピックスを取得できますよ。
コードは同じでもブラウザ側に差がある
1つのURLにChromeでアクセスするのとEdgeでアクセスするのではURL内のパスが変わる事があります。
XPathを取得した際にパスが通らない場合がある
一部#shadow-rootという文字が出てきてパスが繋がってない場所が出てくる可能性があります。
shadow-rootについては特殊なアクセス方法を使わないとデータが取得出来ません。
私が見つけたのはEdgeであればパスが開通していますがChromeだとshadow-rootになるURLでした。
理由は省略しますがどちらも閲覧するうえでは全く問題ありません。
ことスクレイピングとなると困ります。パスが繋がってないので情報が取得出来ません。
対策は別途記事を用意します。
すぐ対策したい方はスクレイピングの際にブラウザを変えると解決する可能性があります。
画面遷移に差がある
何らかの操作をした後にChromeだとAという画面が出るがEdgeだと出ないなど細かい差もあります。
これは実際に作業をしてみないと分からないです。ご自身で確認ください。
よってChromeで通ったコードはイコールでEdgeで使えるわけではないです。ご注意ください。
まとめ
まずはEdgeドライバーのリネームだけ気を付けましょう。これで実行時エラー0は対策できます。
ただし私の様にChromeでしかスクレイピングをやった事が無い人は気付けないです。
どうかこの記事に辿り着いていただく事を願うばかりです。
あとはブラウザ毎に画面遷移の差を見て動きにあったコードを用意するまでです。
これでEdgeでもWebスクレイピングが出来る様になったはずです。是非試してみてください。
こんな事もできます【selenium×VBA】XPath指定でClass属性を取得