このページで紹介するメソッド
例えばテキストの入力に応じて発火するjavascriptがあるとき、単純にテキストを自動入力するだけでは、javascriptのコードが実行されないことがあります。手動での操作であってもテキストをコピペしただけでは動かないが、EnterキーやTabキーを押すと動くことがあります。このページではExcelVBA(マクロ)でWebページ上の指定の要素に対しGoogleChrome(以下chrome)からキーストロークを送信する「Sendkey」メソッドについて解説をします。
事前準備(LesserScraping)
chromeのプロファイルを作成済、かつ「LesserScraping」というクラスが用意されていることを前提に解説をすすめますが、何を言っているかわからないよという方は、まず初回記事を読んでください。
引数
■第1引数:send_key_stroke
⇒独自の定数(列挙型変数)を定義しています。「lsEnter」「lsTab」「lsBackspace」対応しているのはこの3つのみです。本家SeleniumBasicより劣っている(Lesser)ポイントのひとつです。それぞれ名称に応じたキーストロークを送信します。
■第2引数:element_value_or_path
⇒要素を指定する文字列
■第3引数:element_type
⇒要素の指定方法
■第4引数:element_index
⇒要素が絞り込めない場合、先頭からの番号(1始まり)
■第5引数:wait_time_value
⇒処理後の待機時間をミリ秒で指定(1000ミリ秒⇒1秒)
要素(Element)の指定方法
第2~第4引数までの指定方法がわからないという方は、先にこちらの記事を読んでください。
サンプルコード(クリックでコピー)
Private Sub Test_LesserScraping_SendKey()
Dim Driver As LesserScraping: Set Driver = New LesserScraping
Call Driver.Start
Call Driver.NavigateTo("https://funcref.com/order/", 1500)
Call Driver.MaximizeWindow
Call Driver.ScrollTo("//*[@id=""wpcf7-f837-p838-o1""]/form/p[1]/label", lsxPath, , 1000)
Call Driver.SendKey(lsTab, "//*[@id=""company""]", lsxPath)
Set Driver = Nothing
End Sub
【結果】指定した要素にキーストロークを送ることができました
サンプルコードを実行すると当サイトの開発相談ページへ遷移し「御社名~」の表示まで画面をスクロールさせたのち「御社名~」のテキストボックスに対し「Tab」文字を送信します。動きをわかりやすくするために画面スクロール後、1000ミリ秒(1秒)の停止動作を入れています。次のテキストボックスにカーソルが移っていることを確認できます。
業務用PCでスクレイピングするなら「LesserScraping」
業務用PCでExcelVBA(マクロ)からWebスクレイピングをしようとすると「Selenium Basic」の導入でつまずく方は多いです。当サイトでは劣化版Selenium Basicと呼べる「Lesser Scraping」を開発し無償で公開しています。
Comment