【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()

仕事以外でも収入が欲しい方

まずは、こちらを読んでみてください。読むのはもちろんタダです。自分にあったものがきっと見つかるはず。



無在庫販売でお小遣い稼ぎしませんか?






初心者も多数使っているので安心して始められます。




コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

ABOUTこの記事をかいた人

モットーはスティーブ・ジョブズのStay hungry Stay Foolish. 野心を持って正しい方法を身につければ誰でも成功できることを証明していきます。 本職以外で収入を得たい方の手助けができればと思います。