38
42

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

VBAからchromeスクレイピング

Last updated at Posted at 2019-03-26

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

38
42
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
38
42

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?