自分方位研究所

日々の活動記録

(Excel VBAでのIE制御) はてなブログ 「記事の管理」ページ で「getElementsByTagName」

6月13日の記事で、 はてなブログのダッシュボード、記事の管理ページでの記事一覧から、1記事分を抜き出すやり方を修正しました。
前回での1記事分の取り方やり方は 「getElementsByTagName("tr"」でTRタグをつかまえたあとに、getElementsByClassName("tr-hover ")

を捜して、さらに 「年」という字を捜して・・・とやっておりましたが

このやり方では、同一記事の範囲を何度も繰り返して取得してしまい、次の記事範囲が取れない状態になっていました。

For Each objTag_tr In objIE.document.getElementsByTagName("tr")
   For Each objClas_tr_hover In objTag_tr.document.getElementsByClassName("tr-hover ")
       If InStr(objClas_tr_hover.innerHTML, "年") > 0 Then

このときのコードを紹介していた記事です。↓ 

 これを以下のように変更しました。

「getElementsByTagName("tr")」で TRタグをつかまえるのは、以前と同じですが、
その次に 「<td class="td-entry-title"」という文字列を捜して、これが存在すれば記事情報であるということを確定します。

要点のみのコードで、このままでは実行できず申し訳ありません。

Sub s06_GetListOfArticles2()

'1期間分(1ページ分)のソースリストから1記事分の情報を抜き出す

Dim objTagTR As Object '<tr>

For Each objTagTR In objIE.document.getElementsByTagName("tr")

    If InStr(objTagTR.innerHTML, "<td class=""td-entry-title") <> 0 Then
        '~~~ 1記事分の処理  ~~~
    End If
Next objTagTR
Set objTagTR = Nothing

End Sub

--------------------------------------------------

 ご参考までに、For Each~~ 「getElementsByTagName("tr")」で取得したOuterHTMLをExcelシートに貼りつけた状態をお見せします。5つめの<TR>から記事情報が出てきます。

先ず1つ目のTRタグ。カテゴリ一覧が入っています。

1 <tr>
2 <th><label for="label-admin-entries-category">カテゴリー
</label></th>
3 <td>
4 <select name="category" class="entry-search-input
js-categories-selector" id="label-admin-entries-category">
5 <option value="">カテゴリー指定なし</option>
6 <option value="日記">日記</option>
<option value="読書">読書</option>
<option value="雑文">雑文</option>
<option value="旅行">旅行</option>
<option value="Windows">Windows</option>
<option value="HUAWEI P9 lite">HUAWEI P9 lite</option>
<option value="ブログ運営">ブログ運営</option>
<option value="健康">健康</option>
<option value="mineo">mineo</option>
<option value="片づけ">片づけ</option>
<option value="生活">生活</option>
<option value="メモ帳ノート">メモ帳ノート</option>
<option value="Excel VBA">Excel VBA</option>
<option value="過去記事のメンテナンス通知">
過去記事のメンテナンス通知</option>
<option value="退職">退職</option>
<option value="ジムニー">ジムニー</option>
<option value="Amazon">Amazon</option>
<option value="工作">工作</option>
<option value="PC整備">PC整備</option>
<option value="自転車">自転車</option>
<option value="映画">映画</option>
<option value="格安SIM">格安SIM</option>
<option value="@nifty">@nifty</option>
<option value="英語学習">英語学習</option>
<option value="200kbps制限">200kbps制限</option>
<option value="アプリ">アプリ</option>
<option value="NTTフレッツ">NTTフレッツ</option>
<option value="IPHONE">IPHONE</option>
<option value="ラジオ">ラジオ</option>
<option value="独自ドメイン">独自ドメイン</option>
<option value="Android">Android</option>
<option value="スマホ">スマホ</option>
<option value="LaLaCall">LaLaCall</option>
<option value="LINE">LINE</option>
<option value="Fire HD 8 タブレット">
Fire HD 8 タブレット</option>
<option value="HUAWEI MediaPad T2 8.0 PRO">
HUAWEI MediaPad T2 8.0 PRO</option>
<option value="金融">金融</option>
<option value="Apple">Apple</option>
<option value="@niftyでんき">@niftyでんき</option>
<option value="時間">時間</option>
<option value="インターリンク">インターリンク</option>
<option value="アニメ">アニメ</option>
<option value="メルカリ">メルカリ</option>
<option value="Excel">Excel</option>
<option value="BLUETOOTH">BLUETOOTH</option>
<option value="メール">メール</option></select>
7 </td>
8 </tr>

--------------------------------------------------

2つめの<TR>

1 <tr>
2 <th><label for="label-admin-entries-hatenaid">
作成者</label></th>
3 <td>
4 <input name="hatena_id" class="entry-search-input"
id="label-admin-entries-hatenaid" type="text"
placeholder="はてなIDを入力" list="hatena_ids" value="">
5 <datalist class="js-hatena-ids-selector" id="hatena_ids">
6 <option value="k-emu"></option></datalist>
7 </td>
8 </tr>

 

3つめの<TR>

1 <tr>
2 <th>投稿日</th>
3 <td>
4 <input name="datetime_from" class="entry-search-input"
type="date" value="">
5
6 <input name="datetime_to" class="entry-search-input"
type="date" value="">
7 </td>
8 </tr>

--------------------------------------------------

4つめの<TR>

1 <tr>
2 <th class="checkbox-th">
3 <div class="checkbox-table-cell">
4 <input class="js-select-all-entries tipsy-bottom"
type="checkbox" original-title="すべて選択">
5 </div>
6 <div class="entry-table-cell">
7 記事タイトル
8 </div>
9 </th>
10 <th></th>
11 <th>作成者</th>
12 <th>カテゴリー</th>
13 <th>コメント数</th>
14 <th>投稿時間</th>
15 <th></th>
16 </tr>

--------------------------------------------------

5つめの<TR> (記事情報が入っている)
2行目に<td class="td-entry-title"> というタグが入っています。これが記事の印。
情報が入る行番号は、画像の挿入有無や、記事本文が何も書かれていないなどの状況により変化します。
なので、URLや記事題名などの各種情報は、行番号決め打ちではなく、タグを検索してひとつずつ取得していきます。

ちなみに、本文が1文字も無い場合、15行目の<div class="entry-body-summary js-search-entry-body">の次の行には</div>が入ります。

1 <tr class="tr-hover ">
2 <td class="td-entry-title">
3 <div class="entry-table-wrapper">
4 <div class="checkbox-table-cell">
5 <input name="entry" type="checkbox" value="12345678901234567">
6 </div>
7 <div class="entry-table-cell">
8 <div class="entry-table-entry-title">
9

<a class="entry-title js-search-entry-title" href="https://blog.hatena.ne.jp/

hatenaID/hatenaID.hateblo.jp/edit?entry=12345678901234567">宇佐神宮</a>

10 </div>
11 <div class="entry-body has-thumbnail">
12 <div class="entry-thumbnail-image">
13 <img alt="アイキャッチ画像" src="https://cdn.image.st-hatena.com/image/square/aabbccddeeffggghhiijjkkllmmnnoo/
backend=imagemagick;height=60;version=1;
width=60/https%%%.f.st-hatena.com%images%fotolife%%hatenaID%
20200109%20200109223037.jpg">
14 </div>
15 <div class="entry-body-summary js-search-entry-body">
16 (作成中)
17 </div>
18 </div>
19 </div>
20 </div>
21 </td>
22 <td class="td-right td-admin-button">
23 <div class="entry-edit-buttons-row">
24 <div class="dropdown-window-wrapper js-entries-edit-dropdown">
25 <a class="btn dropdown-toggle" href="https://blog.hatena.ne.jp/
hatenaID/hatenaID.hateblo.jp/edit?entry=12345678901234567">編集</a>
26 <div class="entries-edit-dropdown-window dropdown-window">
27 <ul class="list">
28 <li>
29 <a href="https://blog.hatena.ne.jp/hatenaID/hatenaID.hateblo.jp/
edit?entry=12345678901234567">
30 <i class="blogicon-edit"></i> 編集
31 </a>
32 </li>
33 <li>
34 <a href="https://blog.hatena.ne.jp/hatenaID/hatenaID.hateblo.jp/
revisions?entry=12345678901234567">
35 <i class="blogicon-recent"></i> 編集履歴を見る
36 </a>
37 </li>
38 <li>
39 <a href="https://blog.hatena.ne.jp/hatenaID/hatenaID.hateblo.jp/
edit?copy_target_id=12345678901234567">
40 <i class="blogicon-entry"></i> コピーして新しい記事を書く
41 </a>
42 </li>
43 <li>
44

<button class="js-top-placed-activate-button" data-summary="(作成中)" data-url="https://www.mypath-as-variant.com/entry/2020/01/09/223347" data-title="宇佐神宮"

data-uuid="12345678901234567">

45 <i class="blogicon-pinned"></i> トップページの先頭に表示する
46 </button>
47 </li>
48 </ul>
49 </div>
50 </div>
51 </div>
52 </td>
53 <td class="td-blog-author">hatenaID</td>
54 <td class="td-blog-category">
55 </td>
56 <td class="td-blog-comment">0</td>
57 <td class="td-blog-description">
58 <time class="time" datetime="2020-01-09T13:33:47.000Z"
data-epoch="1578576827000" data-local="">2020年1月9日 22:33:47</time>
59 </td>
60 <td>
61

<a href="https://www.mypath-as-variant.com/entry/2020/01/09/223347
" target="_blank"><i title="記事を見る"
class="blogicon-external tipsy-southeast"></i></a>

62 </td>
63 </tr>