前書き
私は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()