VBA Seleniumを利用してWeb情報を取得(基本操作編)

Tag:

Selenium VBAの基本的な使い方について取り上げます。各種サンプルソースを通じて動作確認してみるといいかと思います。

※下記情報なども参考になります。
・https://code.google.com/p/selenium-vba/
・Selenium VBAのインストール先に格納されているヘルプファイル
⇒ SeleniumWrapper\SeleniumWrapperApi.chm

ブラウザの起動・終了

Public Sub selenium_test1()
  Dim selenium As New SeleniumWrapper.WebDriver
  selenium.Start "chrome", "https://www.youtube.com"
  selenium.get ("channel/UCEgdi0XIXXZ-qJOFPf4JSKw")
  selenium.stop
End Sub

chromeを開き、youtubeのスポーツカテゴリーページを表示します。

Startメソッドの第1引数にie,firefox,chromeなどブラウザを指定することができます。第2引数にベースとなるURLを指定します。getメソッドでベースURLからの相対URLを指定することでページ遷移します。

要素指定

要素を指定する方法です。

findElementByTagName("input")          'タグで指定
findElementByName("name")              'name属性で指定
findElementById("id")                  'idで指定
findElementByCssSelector("#id .class") 'cssセレクタで指定
findElementByLinkText("text")          '完全一致
findElementsByPartialLinkText("text")  '部分一致

findElementByXXXX 最初に見つかった要素だけを取得します。
findElementsByXXXX 該当する要素のコレクションを取得します。

フォーム操作

フォームにデータを設定する方法です。

Public Sub selenium_test2()
  Dim selenium As New SeleniumWrapper.WebDriver
  selenium.Start "chrome", "http://www.dn-web64.com/"
  selenium.get ("archives/web/form")
  
  'テキスト入力(type="text")
  selenium.findElementByName("name1").SendKeys ("あいうえお")

  '単一の選択肢(type="radio")
  selenium.findElementsByName("name3").Item(2).Click

  '複数選択可能な選択肢(type="checkbox")
  Dim e_collection As WebElementCollection
  Set e_collection = selenium.findElementsByName("name4")
  e_collection.Item(0).Click
  e_collection.Item(1).Click
  
  'プルダウン形式
  selenium.findElementByName("name5").AsSelect.selectByIndex (1)

  '送信ボタンクリック(type="submit")
  selenium.findElementByName("name10").Click

  selenium.stop
End Sub

HTML/CSS : formタグ | DN-Web64」にアクセスしテキストボックスやチェックボックスの値を設定しています。

データ取得

Public Sub selenium_test5()
  Dim selenium As New SeleniumWrapper.WebDriver
  selenium.Start "chrome", "http://stocks.finance.yahoo.co.jp/"
  selenium.Open "us/profile/AAPL"
    
  Dim data1, data2, data3
  data1 = selenium.findElementByCssSelector("#globalDate > p > strong").Text
  Sheets(1).Cells(1, 1) = data1
    
  data2 = selenium.findElementByCssSelector("#main table.stocksTable").AsTable.GetData()
  Sheets(1).Range("A2").Resize(UBound(data2, 1), UBound(data2, 2)).Value = data2

  data3 = selenium.findElementByCssSelector("#main table.boardFinCom").AsTable.GetData()
  Sheets(1).Range("A5").Resize(UBound(data3, 1), UBound(data3, 2)).Value = data3

  selenium.stop
End Sub

yahooファイナンスからデータ取得して、シート上に設定しています。

スクリーンショット PDFに貼り付け

Public Sub selenium_test3()
  Dim selenium As New SeleniumWrapper.WebDriver
  Set pdf = CreateObject("SeleniumWrapper.PdfFile")
  
  selenium.Start "chrome", "https://www.google.co.jp/maps"
  
  selenium.get ("@38.233512,141.1035951,5.56z")
  pdf.addImage selenium.getScreenshot(), "capture1"
  
  selenium.get ("@35.7466489,139.9308694,9.25z")
  pdf.addImage selenium.getScreenshot(), "capture2"
  
  pdf.SaveAs "selenium-capture.pdf"
  
  selenium.stop
End Sub

ドキュメントフォルダ配下にselenium-capture.pdfが作成されます。PDFには、下記のようにgoogle mapのスクリーンショットが貼り付けられています。
selenium_vba_sample

スクリーンショット シートに貼り付け

Public Sub selenium_test4()
  Dim selenium As New SeleniumWrapper.WebDriver
  selenium.Start "chrome", "http://www.google.com/"
  selenium.Open "/"
  selenium.Type "name=q", "Eiffel tower"
  selenium.Click "name=btnG"
  selenium.Wait 1000
  selenium.setWindowSize 1200, 400
  'selenium.windowMaximize
  selenium.getScreenshot(1).Copy
  selenium.stop
  Sheets(1).Range("A10").PasteSpecial
End Sub

googleで「Eiffel tower」と検索した結果のスクリーンショットをシート上に貼り付けています。
selenium_vba_sample1

スポンサーリンク