初めてのIE操作(5)~リンク(ボタン)をクリックしてページ移動する
リンクを取得してクリックする
前回までの4記事で、
目的のWebページを開き、
起動中のIEオブジェクトを取得し、
表示中のHTMLドキュメントのソースをぶっこ抜いて分析し、
で「検索」用テキストボックスを取得して、検索ワード「ち~んw」を入力した。
あとは、検索実行ボタンを突き止めてクリックするだけだ。
ソースの分析
実は、前回お見せした画像にすでに答えはある。
その部分を抜き書きすると、
<input class="search-result-button" type="submit" value="検索" />
この通り。
つまり、前回のリスト1でご紹介したgetElementByTagAndKeyWord
メソッドを、タグ名に「input
」、キーワードに「value="検索"
」を指定して実行したらよい。
取得した要素をクリックする
要素(今回の場合はinput
要素)を取得したら、その要素をクリックするにはどうするか。
click
メソッドを実行するだけである。
取得した要素オブジェクト式.click
と書くだけである。
アホみたいに簡単である。
やってみる
というわけで、前回のリスト2に、検索ボタンを取得してクリックする処理を付け加える。
リスト1 標準モジュール
Public Sub test() Dim targetIE As New InternetExplorer With targetIE .Visible = True Call .Navigate("http://akashi-keirin.hatenablog.com/entry/2018/12/16/001606") Do While .Busy Or _ .ReadyState <> READYSTATE_COMPLETE DoEvents Loop End With Dim targetTextBox As Object Set targetTextBox = getElementByTagAndKeyWord(targetIE, "input", "name=""q""") targetTextBox.Value = "ち~んw" '(1)' Dim targetButton As Object '(2)' Set targetButton = getElementByTagAndKeyWord(targetIE, "input", "value=""検索""") '(3)' targetButton.Click End Sub
付け加えたのは(1)からの3行
Dim targetButton As Object '(2)' Set targetButton = getElementByTagAndKeyWord(targetIE, "input", "value=""検索""") '(3)' targetButton.Click
(2)の
Set targetButton = getElementByTagAndKeyWord(targetIE, "input", "value=""検索""")
でgetElementByTagAndKeyWord
メソッドにより、クリックしたい要素を取得して変数targetButton
にぶち込み、(3)の
targetButton.Click
で取得したinput
要素オブジェクトのclick
メソッドを実行している。
(2)の「"value=""検索"""
」のダブルクォーテーション祭りの意味がわからない方は
をどうぞ。
実行してみる。
時間はかかるが意図どおり。
問題点
無事にページ移動が行われている以上、何の問題もなさそうだが、実は、リスト2の末尾に、
Debug.Print targetIE.Document.title
を付け足して実行すると、コード実行後、イミディエイト・ウインドウに、
ち~んw の検索結果 - 素人がExcelVBAによる「一人働き方改革」に挑むブログ
と表示されると思いきや、
マーカ部分をRange配列として取得する(Word) - 素人がExcelVBAによる「一人働き方改革」に挑むブログ
と、ページ移動前のページタイトルが表示されるのである……。
ローカル・ウインドウで見ても、
……わけがわからない……。
おわりに
……というわけで、まだまだ続きます。