Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
36
Help us understand the problem. What is going on with this article?

More than 1 year has passed since last update.

@400800mkouyou

VBAからchromeスクレイピング

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をコピー&ペーストしますのでご注意ください。

インストールができたらエクセルを開いて
環境の設定をします。
ツール → 参照設定で以下のダイアログボックスを表示します。
image.png

Selenium Type Library
を探してチェックしてください。
これでChromeDriverを使うことができます。

早速スクレイピングをしよう

準備ができたら、早速chromeスクレイピングをしていきましょう。
chromeをVBAで扱うには以下のコードをメインモジュールに記述します。


Dim driver As New ChromeDriver
 'ChromeDriverのインスタンスを生成しDriver変数に格納
 'このDriverを使っていろいろ操作します。

driver.Start "chrome"
    driver.Get "開きたいサイトのURL"

たったこれだけで指定のサイトを開くことができます!

しかし、中には実行後このようなページに行ってしまう人が多いのではないでしょうか。。。

image.png

。。。ログインしなければいけないようです。

しかし、これも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上の情報をエクセルに転記するという処理をやってみたいと思います。

36
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
36
Help us understand the problem. What is going on with this article?