先日、埼玉県のコロナ感染者数グラフを自動化するとき、はじめてSeleniumを使いました。
Documentationは、SeleniumBasicをインストールするとスタートメニューから開けます。ですが全部英語です。
ほぼ自己使用のために自動翻訳でドキュメンテーションを翻訳しています。
Ver.2.0.9.0のDocumentationです。翻訳はGoogle翻訳が基本ですが、所々手動で翻訳。
なんか内容が変だなというところは、追記してその旨明記しています。
本文内、できるだけアンカーリンクを貼りますが、まだ翻訳してないものも先行してアンカーリンクだけつけてるため、クリックしても飛ばないことがある(多い;; ですがよろしくお願いします。
アンカーリンクは「右クリック→新しいウィンドウで開く」で移動すると、並べて参照できるし、戻りやすくて良いかなと思います。
RPAも試したけど、あらゆるものがWeb化されてるなら、VBA+Seleniumの方が軽快だなぁ、なんて思ったりしてます。
Seleniumbasic ダウンロードはこちらから。
Chrome Driver ダウンロードはこちらから。
ChromeDriver Class
継承の階層
Selenium.SearchContext > Selenium.WebDriver > Selenium.ChromeDriver
コンストラクタ
Dim [instance] As ChromeDriver
※ドキュメンテーションには上記のように書かれていますが、実際は次のようにしないと動きません。
Dim [instance] As New ChromeDriver
メソッド
ChromeDriver.ActiveElement
何もフォーカスを持っていない場合、フォーカス、またはBODYを持つ要素を返します。
ChromeDriver.AddArgument
ブラウザを起動し、コマンドラインに追加する引数を追加します。
ChromeDriver.AddExtension
ブラウザに拡張機能を追加します(するためのFirefoxとChromeのみ)
ChromeDriver.CacheStatus
HTML5のアプリケーションキャッシュの状態を取得します。
ChromeDriver.Close
現在のウィンドウを閉じます。
ChromeDriver.Dispose
リソースを解放します。
ChromeDriver.ExecuteAsyncScript
現在のフレームまたはウィンドウのコンテキストでJavaScriptの非同期部分を実行します。
ChromeDriver.ExecuteScript
現在選択されているフレームまたはウィンドウのコンテキストでJavaScriptの一片を実行
ChromeDriver.FindElement
指定されたメソッドを使用して最初のWebElementを検索します。
ChromeDriver.FindElementBy
所与機構と値と一致する最初の子要素を検索します。
ChromeDriver.FindElementByClass
指定されたCSSクラスを一致する最初の要素を検索します。
ChromeDriver.FindElementByCss
指定されたCSSセレクタにマッチする最初の要素を検索します。
ChromeDriver.FindElementById
指定されたIDと一致する最初の要素を検索します。
ChromeDriver.FindElementByLinkText
指定されたリンクテキストに一致する最初の要素を検索します。
ChromeDriver.FindElementByName
指定された名前に一致する最初の要素を検索します。
ChromeDriver.FindElementByPartialLinkText
供給リンクテキストの一部と一致する要素の最初の検索します
ChromeDriver.FindElementByTag
指定されたタグ名に一致する最初の要素を見出します。
ChromeDriver.FindElementByXPath
指定されたXPathクエリに一致する最初の要素を検索します。
ChromeDriver.FindElements
与えられたメカニズムを使用して、現在のコンテキスト内のすべての要素を検索します。
ChromeDriver.FindElementsBy
与えられたメカニズムと値に一致するすべての子要素を検索します。
ChromeDriver.FindElementsByClass
指定されたCSSクラスを一致する要素を検索します。
ChromeDriver.FindElementsByCss
指定されたCSSセレクタにマッチする要素を見出します。
ChromeDriver.FindElementsById
指定されたIDと一致する要素を検索します。
ChromeDriver.FindElementsByLinkText
指定されたリンクテキストに一致する要素を検索します。
ChromeDriver.FindElementsByName
指定された名前に一致する要素を検索します。
ChromeDriver.FindElementsByPartialLinkText
供給リンクテキストの一部と一致する要素の最初の検索します
ChromeDriver.FindElementsByTag
指定されたタグ名に一致する要素を検索します。
ChromeDriver.FindElementsByXPath
指定されたXPathクエリに一致する検索します要素。
ChromeDriver.Get
現在のブラウザセッションでWebページをロードします。 Openメソッドと同じです。
ChromeDriver.GetClipBoard
クリップボードからテキストを返します。
ChromeDriver.GoBack
ブラウザの歴史の中で後方に一歩を行きます。
ChromeDriver.GoForward
ブラウザの履歴に一歩進みます。
ChromeDriver.IsElementPresent
「を検証は、指定された要素は、ページ上のどこかにあるということ。」
ChromeDriver.PageSource
最後に、ブラウザによってロードされたページのソースを取得します。
ChromeDriver.PageSourceMatch
正規表現にマッチする最初の発生を返します。
ChromeDriver.PageSourceMatches
戻り値の正規表現に一致するすべての出現箇所。
ChromeDriver.Quit
ブラウザを閉じてwebdriverをの処分
ChromeDriver.Refresh
現在のページを更新します。
ChromeDriver.Send
カスタマイズされたコマンドを送信します。
ChromeDriver.SendKeys
ブラウザへの一連のキーストロークを送信します。
ChromeDriver.SetBinary
使用するブラウザの実行ファイルへのパスを設定
ChromeDriver.SetCapability
webdriverをするために特定の機能を設定します
ChromeDriver.SetClipBoard
クリップボード内のテキストを設定します。
ChromeDriver.SetPreference
Firefoxのwebdriverをのための特定の好みを設定します
ChromeDriver.SetProfile
Firefoxのwebdriverをのための特定のプロファイルを設定します
ChromeDriver.Start
新しいSeleniumのテストセッションを開始します
ChromeDriver.StartRemotely
リモートで新しいSeleniumのテストセッションを開始します
ChromeDriver.SwitchToAlert
ページ上の警告にフォーカスを切り替えます。
ChromeDriver.SwitchToDefaultContent
ページがiFrameのが含まれている場合、ページ上の最初のフレームまたはメイン文書のいずれかを選択します。
ChromeDriver.SwitchToFrame
インデックス(ゼロベース)、名前またはWebElementにより、指定されたフレームにフォーカスを切り替えます。
ChromeDriver.SwitchToNextWindow
次のウィンドウにフォーカスを切り替えます。
ChromeDriver.SwitchToParentFrame
現在選択されているフレームの親フレームを選択します。
ChromeDriver.SwitchToPreviousWindow
前のウィンドウにフォーカスを切り替えます
ChromeDriver.SwitchToWindowByName
名前で指定されたウィンドウにフォーカスを切り替えます。
ChromeDriver.SwitchToWindowByTitle
タイトルによって指定されたウィンドウにフォーカスを切り替えます。
ChromeDriver.TakeScreenshot
現在のウィンドウのスクリーンショットを取ります
ChromeDriver.Until< T>
デリゲート機能のための待機が返すことがnullまたは真実ではありません
ChromeDriver.Wait
次のコマンドを実行する前に、ミリ秒単位で指定された時間を待って
ChromeDriver.WaitForScript
本当かどうかはnullを返すためにはJavaScriptの作品を待ち。
ChromeDriver.WaitNotElement
不足しているべき要素を待ちます。
プロパティ
ChromeDriver.Actions
アクションクラスを返します
ChromeDriver.BaseUrl
ベースURLは、Getで相対URLを使用します
ChromeDriver.Keyboard
キーボード
ChromeDriver.Keys
キー
ChromeDriver.Manage
その設定を変更するには、ドライバに指示します。
ChromeDriver.Mouse
マウス
ChromeDriver.Proxy
(webdriverをから継承されます。)
ChromeDriver.Timeouts
ブラウザの設定を管理します。ブラウザを起動する前に定義する必要があります
ChromeDriver.Title
現在のブラウザウィンドウのタイトルを取得します。
ChromeDriver.TouchActions
TouchActions
ChromeDriver.TouchScreen
タッチスクリーン
ChromeDriver.Url
ブラウザは、現在表示しているURLを取得します。
ChromeDriver.Window
ユーザーは、現在フォーカスさブラウザのウィンドウを操作できるようにするオブジェクトを取得します。
ChromeDriver.Windows
開いているブラウザウィンドウのウィンドウハンドルを取得します。
コードサンプル
Public Sub Script()
Dim driver As New ChromeDriver
driver.Get "http://www.google.com"
...
driver.Quit
End Sub
メソッド FindElementsByCss
※Element”s”の方。 sがないやつは別。
構文
Dim instance As SearchContext
Dim cssselector As String
Dim minimum As Integer
Dim timeout As Integer
Dim returnValue As WebElements
returnValue = instance.FindElementsByCss(cssselector,
minimum, timeout)
引数
cssselector
Type: System.String
検索対象のCSS セレクタ
例 ”.news > ul > li > span”
※本当のcssは、中間要素を飛ばしても効きますが、このメソッドでの指定は中間要素を飛ばすと検知されません。
<div class="wrap">
<div class="text">
<h3 class="title">見出し</h3>
<p>本文はここにあります。</p>
</div>
</div>
このようなHTMLドキュメントに対しては
elements = Driver.FindElementsByCss(".wrap > .title").Text ' 正しくスクレイプできない
elements = Driver.FindElementsByCss(".wrap > .text > .title").Text '正しく「見出し」とスクレイプされる
minimun(オプション)
Type: System.Int32
オプション:待機する要素の最小数
timeout (Optional)
Type: System. Int32
オプション:タイムアウト ms
戻り値
戻り値の型: WebElements
メソッド FindElementByCss
※Element、sがない方。
構文
Dim instance As SearchContext
Dim cssselector As String
Dim timeout As Integer
Dim raise As Boolean
Dim returnValue As WebElement
returnValue = instance.FindElementByCss(cssselector,
timeout, raise)
引数
cssselector
Type: System.String
検索対象のCSS セレクタ
例 ”.news > ul > li > span”
timeout (オプション)
Type: System. Int32
オプション:タイムアウト ms
raise(オプション)
Type:System.Boolean
オプション:Trueのとき、タイムアウト経過後に例外を発生させる
戻り値
戻り値の型: WebElement またはnull
※当店注 直接Driverに対して実行したときは、検索結果の最初の要素が入ります。下記コードのようにWebElementsから1個ずつ取り出すこともできます。要素が入りますが、そのままでは使えず、.Text や .Attributeを使って値を取り出します。
下記は当ブログ掲載 埼玉県のオープンデータをスクレイプするコード記事公開は終了しました
Dim Driver As New Selenium.WebDriver
Driver.start "chrome"
Dim elements As Selenium.WebElements
Dim element As Selenium.WebElement
Set elements = Driver.FindElementsByCss(".dropdown > ul > li > a")
count = elements.count
For Each element In elements
result = element.Attribute("href")
If result <> "" Then DlTarget = result
Next
DlResult = URLDownloadToFile(0, DlTarget, UserPath & "\saitama-covid-opendata.csv", 0, 0)
メソッド Get
現在のブラウザセッションでウェブページを読み込みます。Openメソッドと同じです。
構文
Dim instance As WebDriver
Dim url As String
Dim timeout As Integer
Dim raise As Boolean
Dim returnValue As Boolean
returnValue = instance.Get(url, timeout, raise)
引数
url
Type: System.String
URL
例 ”.news > ul > li > span”
timeout (オプション)
Type: System. Int32
オプション:タイムアウト ms 無限大=-1
raise(オプション)
Type:System.Boolean
オプション:Trueのとき、タイムアウト経過後に例外を発生させる
戻り値
戻り値の型: Boolean
タイムアウト時間内にURLが開いたらTrueが返る。それ以外はFalse
クラス WebElements
継承の階層
System. Object > Selenium. List > Selenium. WebElements
構文
Dim instance As WebElements
配列っぽい格納をしますが配列ではなく Selenium.Listです。オブジェクト型なので代入はSetにより行います。
Set instance = [WebElementsを返す構文]
メソッド
Add(Object)
リスト内の値を追加します。
Add(WebElement)
ウェブ要素を追加します。
AddRange
リストで、一度に複数の値を追加します。
Attribute
各要素の属性とのリストを返します。
Clear
リストをクリアします
Contains
リストに値が含まれている場合にtrueを返します。
Convert< T>
それぞれの値に変換します。
CopyTo
アレイにコピー値を
Distinct
重複を削除
ExecuteAsyncScript
各Web要素を返すすべての結果に対してのJavaScriptの非同期部分を実行します。
ExecuteScript
各Web要素を返すすべての結果に対してのJavaScriptの部分を実行します。
First
最初の項目を返します。
GetEnumerator
リストの列挙子を返します。
IndexOf
値のインデックスを返します。
Insert
インデックスの値を挿入
Last
最後の項目を返します。
LastIndexOf
端から始まる値のインデックス。
Remove
値を削除します
RemoveAt
インデックスの値を削除します
Sort
エレメントをソート
Text
各要素のテキストを含むリストを返します。
ToArray
値を配列として返します
※ExcelのオブジェクトブラウザーにToArrayがありません。実際エディタでも候補として出ないので、これはVBAでは使えないんじゃないかと思います。
ToExcel
Excelのセル範囲に値をコピーします。ターゲットは、アドレス、ワークシートまたは範囲であることもできます。
Values()
値を配列として返します
Values(Object, Int32, Int32)
戻り値の各要素の数値に解析されたテキストを含むリスト
プロパティ
Count
itemsの数を返します。
IsFixedSize
利用不可
IsReadOnly
利用不可
IsSynchronized
偽を返します。
Item
提供されたインデックスにWebElementを取得
SyncRoot
nullを返します。
コメント