【副業】【VB.NET】Seleniumによる自動操作

【副業】【VB.NET】Seleniumによる自動操作

こんにちわ!

現在までVB.NETでSeleniumによるブラウザ操作ツールを複数作成してきました。

ソースとしてもSelenium部分をクラス化し、部品化ができましたので今回は簡易ツールとして販売したいと思います。

 

簡易ツールではchromeにてgoogleトップページを表示し、検索バーに文字を入力し、検索を行うという処理を行います。

また簡易ツールではSeleniumが動作する環境も整っておりますのでそのまま自身が作成しようとしているツールのベースにしていただいて問題ありません。

販売価格は税込み3000円となります。

以下PayPalにてお支払いしていただければメール等でツールを送付致します。




 

最後にVB.NETでのSelenium記事が少ないため以下に簡単にまとめたSeleniumの使い方を記載します。

 

Dim Webchrome As OpenQA.Selenium.IWebDriver = New OpenQA.Selenium.Chrome.ChromeDriver()

該当URLの表示(新規IEインスタンスの生成)
Webchrome.Url = “https://www.google.com/?hl=ja”

現在ページから「戻る」
Webchrome.Navigate().Back()
現在ページから「進む」
Webchrome.Navigate().Forward()
現在ページの再読み込み
Webchrome.Navigate().Refresh()
現在ページから該当URLへ遷移
Webchrome.Navigate().GoToUrl(“https://www.yahoo.co.jp/”)

現在ページのURL取得
Dim CurrentUrl As String = Webchrome.Url
現在ページのタイトルを取得
Dim CurrentPage As String = Webchrome.Title
現在ページのHTMLソースを取得
Dim CurrentHTML As String = Webchrome.PageSource

アクティブページの画面要素取得のためのインスタンス生成
Dim IEelement As OpenQA.Selenium.IWebElement

画面内情報をname属性にて取得したいとき(HTMLを一番上から検索して一番最初に見つかった要素を返却)
IEelement = Webchrome.FindElement(By.Name(“q”)) ‘google初期ページの検索テキストボックスコントロールのname属性が”q”

以下各属性にて取得(HTMLを一番上から検索して一番最初に見つかった要素を返却)
IEelement = Webchrome.FindElement(By.PartialLinkText(“q”))
IEelement = Webchrome.FindElement(By.XPath(“q”))
IEelement = Webchrome.FindElement(By.LinkText(“q”))
IEelement = Webchrome.FindElement(By.TagName(“q”))
IEelement = Webchrome.FindElement(By.ClassName(“q”))
IEelement = Webchrome.FindElement(By.CssSelector(“q”))
IEelement = Webchrome.FindElement(By.Id(“q”))

画面内情報をname属性にて取得したいとき(HTML内で検索して見つかった要素すべてをリストで返却)
Webchrome.FindElements(By.PartialLinkText(“q”))
以下各属性にて取得(HTMLを一番上から検索して一番最初に見つかった要素を返却)
Webchrome.FindElements(By.PartialLinkText(“q”))
Webchrome.FindElements(By.XPath(“q”))
Webchrome.FindElements(By.LinkText(“q”))
Webchrome.FindElements(By.TagName(“q”))
Webchrome.FindElements(By.ClassName(“q”))
Webchrome.FindElements(By.CssSelector(“q”))
Webchrome.FindElements(By.Id(“q”))

ウィンドウ情報を取得(複数タブの一番最後 一番右のタブのウィンドウ情報)
Dim WindowID As String = Webchrome.WindowHandles.Last

アクティブタブウィンドウ情報
Dim CurrentWindowID As String = Webchrome.CurrentWindowHandle

該当のタブに移動
Webchrome.SwitchTo.Window(WindowID)

アクティブウインドウでのイベント操作インスタンス生成
Dim WebAction As OpenQA.Selenium.Interactions.Actions = New OpenQA.Selenium.Interactions.Actions(Webchrome)

該当要素をクリック
IEelement = Webchrome.FindElement(By.Id(“ID”))
IEelement.Click()

該当要素まで自動スクロールして該当要素をクリック
Dim Webaction As OpenQA.Selenium.Interactions.Actions = New OpenQA.Selenium.Interactions.Actions(Webchrome)
IEelement = Webchrome.FindElement(By.Id(“ID”))
Webaction.MoveToElement(IEelement).Click(IEelement).Build.Perform()

該当要素にマウスオーバー後に複数の項目が展開され展開された項目をクリック
(イメージ右図 yuzunomiyaさんにマウスオーバー後、MYページTOPなどが展開)
Dim Webaction As OpenQA.Selenium.Interactions.Actions = New OpenQA.Selenium.Interactions.Actions(Webchrome)
IEelement = Webchrome.FindElement(By.Id(“ID”))
CkEelement = Webchrome.FindElement(By.Id(“Click”))
Webact.MoveToElement(IEelement).Click(CkEelement).Build.Perform()

ドロップダウン選択
IEelement = Webchrome.FindElement(By.Name(“DropDown”))
Dim SelectDropdown As SelectElement = New SelectElement(IEelement)

テキストで選択
SelectDropdown.SelectByText(“Text”)

インデックスで選択
SelectDropdown.SelectByIndex(2)

値で選択
SelectDropdown.SelectByValue(“Value”)

該当要素に画像アップロード
IE以外は以下でいけるよう
Webchrome.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(Webchrome)

Dim cbtn As IWebElement = Webchrome.FindElement(By.XPath(“//*[@id=’js-async-upload-area’]/div/ul/li/div/div”))
Webact.MoveToElement(cbtn).Click(cbtn).Build.Perform()

System.Threading.Thread.Sleep(5000)

SendKeys.SendWait(“C:\Users\aaa.PNG”)
SendKeys.SendWait(“{Enter}”)

1.該当ページの要素が表示されるまで特定時間待つ(System.Threading.Thread.Sleepで待たない方法)
Dim Time As TimeSpan = New TimeSpan(0, 0, 10)  10秒
Webchrome.Manage.Timeouts.ImplicitWait = Time
Webchrome.FindElements(By.Id(“q”))

現在のウィンドウを閉じる
Webchrome.close()

現在のウィンドウを全て閉じる
Webchrome.Quit()

JavaScriptを使用する

<input name=”hoge”>のvalueに「1234567890」を設定
Dim webJava As IJavaScriptExecutor = New OpenQA.Selenium.Chrome.ChromeDriver()
webJava.ExecuteScript(“document.getElementsByName(‘hoge’)[0].value = ‘1234567890’;”)

<input name=”hoge” maxlength=”8″>のmaxlengthを削除
webJava.ExecuteJavaScript(“document.getElementsByName(‘hoge’)[0].removeAttribute(‘maxlength’);”);

argumentsに引数の配列が渡されます
IEelement = Webchrome.FindElement(By.Id(“ID”))
Webchrome.ExecuteJavaScript(“arguments[0].value = ‘piyo’;”, e);