#VBAでchromeをスクレイピングしよう。
かつてIEのスクレイピングをして、価格ドットコムから情報を取得し、エクセルにランキング表を作る。ということをしていましたが、やはり今はやりのchromeでやりたいなーと思い挑戦してみました。
IEのスクレイピングだと、VBAの参照設定でできるのですがchromeの場合は簡単にはいきませんでした。調べてみるとSeleniumBasicというライブラリをインストールして使うことが有効とわかりましたので、SeleniumBasicを用いてchromeスクレイピングしてみようと思います。
##SeleniumBasicのインストール方法
以下の記事が役に立ちましたので紹介します。
https://lil.la/technology/technology-memo/post-3436
上記記事で
zipを解答すると、 chromedriver.exe が1ファイルあると思います。 このファイルを、Selenium Basicをインストールしたフォルダにコピー&上書きします。
という説明文があるのですが、解凍した先のフォルダにchromedriver.exeをコピー&ペーストしますのでご注意ください。
インストールができたらエクセルを開いて
環境の設定をします。
ツール → 参照設定で以下のダイアログボックスを表示します。
Selenium Type Library
を探してチェックしてください。
これでChromeDriverを使うことができます。
##早速スクレイピングをしよう
準備ができたら、早速chromeスクレイピングをしていきましょう。
chromeをVBAで扱うには以下のコードをメインモジュールに記述します。
Dim driver As New ChromeDriver
'ChromeDriverのインスタンスを生成しDriver変数に格納
'このDriverを使っていろいろ操作します。
driver.Start "chrome"
driver.Get "開きたいサイトのURL"
たったこれだけで指定のサイトを開くことができます!
しかし、中には実行後このようなページに行ってしまう人が多いのではないでしょうか。。。
。。。ログインしなければいけないようです。
しかし、これもVBAからできてしまいます。
他のサイトのログイン処理も同様に可能なのでログインの処理をしてみます。
driver.FindElementById("i0116").SendKeys "あなたのメールアドレス"
driver.FindElementById("idSIButton9").Click
driver.FindElementById("i0118").SendKeys "あなたのパスワード"
driver.Wait 1500
driver.FindElementById("idSIButton9").Click
driver.Wait 1500
driver.FindElementById("idSIButton9").Click
コードの解説
driver.FindElementById("i0116").SendKeys "あなたのメールアドレス"
※解説
html上のid名を探します。i0116とうID名がついていたので取得します。
SendKeysは送信ボタンを押すというスクレイピング独自のコマンドです。
これでinputタグに入力されたあなたのメールアドレスが送信されるようになります。
ただしまだ送信ボタンを押しているわけではありません。
上記はパスワードも同様ですので割愛します。
次に送信ボタンを押します。
driver.FindElementById("idSIButton9").Click
これで送信ボタンが押せます。
送信ボタンもHTMLのid名を探しています。
もし、他のサイトでボタンがid名ではなくclass名やbuttonタグなどであればFindElementsByClassなどで取得します。
.Clickがボタンを「押す」をという処理を実行してくれます。
driver.Wait 1500
これは待ち時間を記述しています。
これがないとchromeがすぐに画面遷移をしてしまい
文字の入力やボタンの押下処理がうまくいきません。
だいたい1秒(1000)以上は待ったほうがスムーズです。
パスワードまで送信できたら、ほぼ完了です。
最後にもう一度ボタンを押す処理があるので、記述しています。
いかがでしょうか。
chromeスクレイピングがVBAからできました。
次は、WEB上の情報をエクセルに転記するという処理をやってみたいと思います。