環境
- 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