自分方位研究所

日々の活動記録

(Excel VBAでのIE制御) はてなブログ 「記事の管理」ページ の記事一覧。「次のページ」ボタンをクリック

はてなブログのダッシュボード。記事の管理について。

昨日の続きです。日付を指定して、記事一覧が表示された後、指定した期間の記事が全て表示されるように「次のページ」をクリックします。

記事の管理ページの一番下に現れる「次のページ」ボタンをクリックします。
このボタンをクリックすることによって20記事分が現在表示されている記事の下に追加表示されます。

f:id:k-emu:20200611222956j:plain

その前に確認。VBE(Visual Basic Editor)のツール >参照設定 にて以下の2つをチェックしておきます。
・Microsoft html Object Library
・Microsoft html Internet Controls

f:id:k-emu:20200611223236j:plain

f:id:k-emu:20200611223728j:plain

今頃になってコレチェックするはないでしょう?と言われるかもしれませんが、この2つをチェックしていないと「次のページ」ボタンがVBAでクリックできないのでした。

 

「次のページ」ボタンに関するHTMLコードを確認すると、以下のようになっています。<button>タグで style="display: inline-block;"

となっています。この状態では、まだ表示しきれていない記事があるので「次のページ」ボタンが表示されています。

<button class="btn load-next-entries js-load-next-page" style="display: inline-block;">
  次のページ
</button>

 

そして、「次のページ」ボタンを何度かクリックして、最後まで記事を表示しきったとき(最後のページまで表示したとき)には「次のページ」が消えていますので、<button>タグは、 style="display: none;"

となっています。

<button class="btn load-next-entries js-load-next-page" style="display: none;">
  次のページ
</button>

 

これをVBAコードで記述していくと、以下のようになります。
objIEは、管理ページのオブジェクトです。 

Dim objTag As Object
Do
    For Each objTag In objIE.document.getElementsByTagName("button")
        If InStr(objTag.innerHTML, "次のページ") > 0 Then
            If InStr(objTag.outerHTML, "none") = 0 Then
                objTag.Click
                Call IE_WAIT(objIE)
                Exit For
            Else
                Exit Do
            End If
        End If
     Next
Loop

内容は、<button>タグの中で、文字列 「次のページ」を含んだものを捜します。

そして、みつけたら、そのタグのHTMLコードの中に「none」の文字列があるか捜します。「none」が見つからなければ、「次のページ」はまだ存在しているということなので<button>タグを.Click します。

クリックした後、タイマー用として作成した「IE_WAIT」プロシージャを呼び出して、IEの画面が落ち着くまで待機します。(このプロシージャの中身については、今回は省略します。

一度For Each ループを抜けて、再度同じことを実行し、「none」の文字列をみつけたら、Do-Loopを抜けて処理完了です。

これで、「次のページ」ボタンはクリックしきったので、1回で取得する記事 一覧が表示できたことになります。

 

次回に続きます。次でようやく、「記事の管理」ページのソースコードをちゃんと見ていき、各記事編集用アドレスなどの内容を取得するにはどのタグを見ればよいのかを捜していきます。