初めてのIE操作(5)~リンク(ボタン)をクリックしてページ移動する

リンクを取得してクリックする

前回までの4記事で、

akashi-keirin.hatenablog.com

目的のWebページを開き、

akashi-keirin.hatenablog.com

起動中のIEオブジェクトを取得し、

akashi-keirin.hatenablog.com

表示中のHTMLドキュメントのソースをぶっこ抜いて分析し、

akashi-keirin.hatenablog.com

で「検索」用テキストボックスを取得して、検索ワード「ち~んw」を入力した。

あとは、検索実行ボタンを突き止めてクリックするだけだ。

ソースの分析

実は、前回お見せした画像にすでに答えはある。

f:id:akashi_keirin:20181229075054j:plain

その部分を抜き書きすると、

<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=""検索"""」のダブルクォーテーション祭りの意味がわからない方は

akashi-keirin.hatenablog.com

をどうぞ。

実行してみる。

f:id:akashi_keirin:20181229075108g:plain

時間はかかるが意図どおり。

問題点

無事にページ移動が行われている以上、何の問題もなさそうだが、実は、リスト2の末尾に、

Debug.Print targetIE.Document.title

を付け足して実行すると、コード実行後、イミディエイト・ウインドウに、

ち~んw の検索結果 - 素人がExcelVBAによる「一人働き方改革」に挑むブログ

と表示されると思いきや、

マーカ部分をRange配列として取得する(Word) - 素人がExcelVBAによる「一人働き方改革」に挑むブログ

と、ページ移動前のページタイトルが表示されるのである……。

f:id:akashi_keirin:20181229075215j:plain

ローカル・ウインドウで見ても、

f:id:akashi_keirin:20181229075203j:plain

……わけがわからない……。

おわりに

……というわけで、まだまだ続きます。

参考

akashi-keirin.hatenablog.com

akashi-keirin.hatenablog.com

akashi-keirin.hatenablog.com

akashi-keirin.hatenablog.com

akashi-keirin.hatenablog.com