Edited at

Google Chrome, Excel VBA, Seleniumbasicを使ったスクレイピング

More than 1 year has passed since last update.


環境


  • Windows 7

  • Microsoft Excel2010

  • Google Chrome 65.0.3325.181(Official Build)(64 ビット)

  • Seleniumbasic v2.0.9.0

  • ChromeDriver 2.38


準備


Seleniumbasicのインストール

http://florentbr.github.io/SeleniumBasic/ からダウンロード、インストール。


chromedriverの更新

https://sites.google.com/a/chromium.org/chromedriver/downloads からダウンロード。SeleniumBasicをインストールしたフォルダにあるchromedriver.exeをダウンロードしたもので置き換える。


VBA作成

Excelを起動、Microsoft Visual Basic for Applicationsを開き(Alt+F11)、ツール→参照設定→Selenium Type Libraryにチェックを入れる。後は通常のVBA同様、コード作成、デバッグを行う。

オブジェクトブラウザ(F2)のクラスChromeDriverでメンバを確認することができる。基本的なコードは以下。

Sub openurl

Dim driver As New ChromeDriver
'WEBページを開く
driver.Get "https://..."
'やりたいことを記入
'
'
'

'終了
driver.quit
End Sub


(例) マネックス証券 FX PLUSの口座管理・設定ページから評価証拠金のデータを取得する

ポイントは、


  • FX PLUSのページへのリンクをクリックすると新しいウインドウが開くので、ChromeDriverに新しいウィンドウのドキュメントを参照させるため、SwitchToNextWindowメソッドを実行する

  • 取得したい情報がiframe内にあるときは、 そのiframe内のドキュメントを参照させるため、SwitchToFrameメソッドを実行する

  • 操作したいオブジェクトや取得したい情報は、WEBページを表示した状態でデベロッパーツールを起動(Ctrl+Shift+I)し確認する

  • Class, IDで取得するのが難しい(面倒な)ときは、inspectorを起動(Ctrl+Shift+C)し、オブジェクト、ドキュメントをクリック、対象のコードが選択状態になるので、右クリック→Copy→Copy selector or Copy XPathでコピー、FindElementByCssかFindElementByXPathで使う

Sub getData()

Dim driver As New ChromeDriver

'ログイン
driver.Get "https://mxp1.monex.co.jp/pc/ITS/login/LoginIDPassword.jsp"
driver.FindElementById("loginid").SendKeys "****"
driver.FindElementById("passwd").SendKeys "****"
driver.FindElementByCss("#contents > div > p.mb-20 > input").Click

'FX PLUSのページに移動
driver.FindElementByCss("#btnFx > a").Click
driver.SwitchToNextWindow

'口座管理・設定画面に移動
driver.FindElementByCss("#gmenu8").Click
driver.SwitchToFrame "main"

'データの取得
Dim selector As String
selector = "#container > div.content > div.grid.clearFix.bottomMargin > div:nth-child(1) > table:nth-child(2) > tbody > tr:nth-child(1) > td.number > span > span"
debug.print driver.FindElementByCss(selector).Text

'終了
driver.Quit
End Sub