サイトアイコン 成功者への道

【VB.NET】VB.NETでWebブラウザを自動操作する

前書き

私はVB.NETのエンジニアです。

プログラムの書き方で困るとGoogle検索します。

ですが、VB.NETに関する記事はとてつもなく少ないのです。

VBAやC#は山ほど出てくるのでそれを参考に頭を悩ませながらコーディングします。

スクレイピングに大変重宝するSelenium WebDriverですが、これこそVB.NETの記事なんてほぼ存在しないですね。

PythonやRubyがほとんどです。

反抗しているわけではないですが、慣れ親しんだVB.NETを意地でも使うためこれまで時間をかけて習得してきたSelenium WebDriverでChromeを使う方法を大公開します。

当ページを参考に解決した方は、広告を1クリックでもしていただけるととても励みになります。

 

インスタンス作成

Dim WebDriver As IWebDriver
WebDriver = New Chrome.ChromeDriver()


'ページを開く
WebDriver.Url = "https://www.google.co.jp"

 

ブラウザを表示させずバックグラウンドで動作させる場合

Dim WebDriver As IWebDriver
WebDriver = New Chrome.ChromeDriver()
Dim options As Chrome.ChromeOptions = New Chrome.ChromeOptions
options.AddArguments("--headless")
options.AddArguments("--disable-javascript")

Dim hidesearvice As ChromeDriverService = ChromeDriverService.CreateDefaultService
hidesearvice.HideCommandPromptWindow = True

WebDriver = New Chrome.ChromeDriver(hidesearvice, options)

'ページを開く
WebDriver.Url = "https://www.google.co.jp"

 

現在ページから「戻る」

WebDriver.Navigate().Back()

 

現在ページから「進む」

WebDriver.Navigate().Forward()

 

現在ページの再読み込み

WebDriver.Navigate().Refresh()

 

現在ページから該当URLへ遷移

WebDriver.Navigate().GoToUrl("https://www.yahoo.co.jp/")

 

現在ページのURL取得

Dim CurrentUrl As String = WebDriver.Url

 

現在ページのタイトルを取得

Dim CurrentPage As String = WebDriver.Title

 

現在ページのHTMLソースを取得

Dim CurrentHTML As String = WebDriver.PageSource

 

アクティブページの画面要素取得のためのインスタンス生成

Dim element As OpenQA.Selenium.IWebElement

 

画面内情報をname属性にて取得したいとき(HTMLを一番上から検索して一番最初に見つかった要素を返却)

element = WebDriver.FindElement(By.Name("q"))

 

以下各属性にて取得(HTMLを一番上から検索して一番最初に見つかった要素を返却)

'XPath
element = WebDriver.FindElement(By.XPath("q"))
'リンクテキスト
element = WebDriver.FindElement(By.LinkText("q"))
'タグ名称
element = WebDriver.FindElement(By.TagName("q"))
'クラス名
element = WebDriver.FindElement(By.ClassName("q"))
'CSS
element = WebDriver.FindElement(By.CssSelector("q"))
'ID
element = WebDriver.FindElement(By.Id("q"))

画面内情報をname属性にて取得したいとき(HTML内で検索して見つかった要素すべてをリストで返却)

WebDriver.FindElements(By.PartialLinkText("q"))

 

ウィンドウ情報を取得(複数タブの一番最後 一番右のタブのウィンドウ情報)

Dim WindowID As String = WebDriver.WindowHandles.Last

 

アクティブタブウィンドウ情報

Dim CurrentWindowID As String = WebDriver.CurrentWindowHandle

 

該当のタブに移動

WebDriver.SwitchTo.Window(WindowID)

 

アクティブウインドウでのイベント操作インスタンス生成

Dim WebAction As OpenQA.Selenium.Interactions.Actions = New OpenQA.Selenium.Interactions.Actions(WebDriver)

 

該当要素をクリック

element = WebDriver.FindElement(By.Id("ID"))
element.Click()

 

該当要素まで自動スクロールして該当要素をクリック

Dim Webaction As OpenQA.Selenium.Interactions.Actions = New OpenQA.Selenium.Interactions.Actions(WebDriver)
element = WebDriver.FindElement(By.Id("ID"))Webaction.MoveToElement(element).Click(element).Build.Perform()

 

該当要素にマウスオーバー後に複数の項目が展開され展開された項目をクリック

Dim Webaction As OpenQA.Selenium.Interactions.Actions = New OpenQA.Selenium.Interactions.Actions(WebDriver)
element = WebDriver.FindElement(By.Id("ID"))
CkEelement = WebDriver.FindElement(By.Id("Click"))
Webact.MoveToElement(element).Click(CkEelement).Build.Perform()

 

ドロップダウン選択

element = WebDriver.FindElement(By.Name("DropDown"))
Dim SelectDropdown As SelectElement = New SelectElement(element)

 

テキストで選択

SelectDropdown.SelectByText("Text")

 

インデックスで選択

SelectDropdown.SelectByIndex(2)

 

値で選択

SelectDropdown.SelectByValue("Value")

 

該当要素に画像アップロード

WebDriver.FindElement(By.XPath("//*[@id='js-async-upload-area']/div/ul/li/div/div")).SendKeys("C:¥Users¥aaa.JPG")

 

該当要素をクリックしてエクスプローラーを起動後にエクスプローラーに画像パスを渡して無理やりアップロードする方法

Dim Webact As OpenQA.Selenium.Interactions.Actions = New OpenQA.Selenium.Interactions.Actions(WebDriver)
Dim cbtn As IWebElement = WebDriver.FindElement(By.XPath("//*[@id='js-async-upload-area']/div/ul/li/div/div"))
Webact.MoveToElement(cbtn).Click(cbtn).Build.Perform()
モバイルバージョンを終了