13
15

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.

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

Last updated at Posted at 2018-04-30

環境

  • 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
13
15
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
13
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?