前提・実現したいこと
クローリング後、HTMLが数秒後に変化するので、
Loop、Ifなどで、ページをリロード後、
変化後のHTMLをsubmitでクローリングしたい!
該当のソースコード
HTML
1<tr align="center"> 2<td bgcolor="#FFFFFF"><font size="-1">通常購入</font></td> 3<td bgcolor="#FFFFFF"><font size="-1">28048131</font></td> 4<td bgcolor="#FFFFFF"><font size="-1">2019-09-16 20:20:48</font></td> 5<td bgcolor="#FFFFFF"><font size="-1">全て</font></td> 6<td bgcolor="#FFFFFF"><font size="-1">B2csv</font></td> 7<td bgcolor="#FFFFFF" align="right"><font size="-1">-</font></td> 8<td bgcolor="#FFFFFF"><font size="-1"> 9 102019/09/16~2019/09/16 11 12</font></td> 13 14<td bgcolor="#FFFFFF"><font size="-1">処理中</font></td><!-- ←ここが↓数秒後 --> 15 16</tr> 17 18<tr align="center"> 19<td bgcolor="#FFFFFF"><font size="-1">通常購入</font></td> 20<td bgcolor="#FFFFFF"><font size="-1">28047783</font></td> 21<td bgcolor="#FFFFFF"><font size="-1">2019-09-16 18:47:09</font></td> 22<td bgcolor="#FFFFFF"><font size="-1">発送待ち</font></td> 23<td bgcolor="#FFFFFF"><font size="-1">発送完了報告用</font></td> 24<td bgcolor="#FFFFFF" align="right"><font size="-1">34件</font></td> 25<td bgcolor="#FFFFFF"><font size="-1"> 26 272019/09/10~2019/09/16 28 29</font></td> 30 31<!-------------------------- この用に変化する為!! ---------------------------> 32<form id="command" action="/×××/mall/csvdl/CD03_02_001" method="post"> 33<td bgcolor="#FFFFFF"> 34<input type="submit" value="ダウンロード"> 35<input type="hidden" name="_csrf" value="c4125cb21c34e1af5b20c67b2e240b69"> 36<input type="hidden" name="logId" value="28047783"> 37</td> 38</form> 39 40<!-------------------------△ この用に変化する為!! △---------------------------> 41 42</tr> 43 44<form id="command" action="/×××/mall/csvdl/CD03_02_001" method="post"> 45<td bgcolor="#FFFFFF"> 46<input type="submit" value="ダウンロード"> 47<input type="hidden" name="_csrf" value="c4125cb21c34e1af5b20c67b2e240b69"> 48<input type="hidden" name="logId" value="28047783"> 49</td> 50</form> 51 52 53 54</tr> 55 56<tr align="center"> 57<td bgcolor="#FFFFFF"><font size="-1">通常購入</font></td> 58<td bgcolor="#FFFFFF"><font size="-1">28047783</font></td> 59<td bgcolor="#FFFFFF"><font size="-1">2019-09-16 18:47:09</font></td> 60<td bgcolor="#FFFFFF"><font size="-1">発送待ち</font></td> 61<td bgcolor="#FFFFFF"><font size="-1">発送完了報告用</font></td> 62<td bgcolor="#FFFFFF" align="right"><font size="-1">34件</font></td> 63<td bgcolor="#FFFFFF"><font size="-1"> 64 652019/09/10~2019/09/16 66 67</font></td> 68
vba
1 Dim cboObj3 As HTMLSelectElement 2 Set cboObj3 = ie.document.getElementsByName("templateId")(0) 3 'セレクトボックスを発送報告完了用に変更します 4 cboObj3.Value = "-2" 5 6 For Each objTag In ie.document.getElementsByTagName("input") 7 If InStr(objTag.outerHTML, " データを作成する ") > 0 Then 8 9 '発送報告完了用buttonボタンクリック 10 objTag.Click 11 Exit For 12 End If 13 Next 14 Sleep 10000 '10秒間とめる処理 15 16 Dim objLink As Object 17 18 'アンカータグの表示内容が「ダウンロード利用履歴へ」 19 For Each objLink In ie.document.getElementsByTagName("a") 20 If objLink.innerText = "ダウンロード利用履歴へ" Then 21 objLink.Click 22 Exit For 23 End If 24 Next 25------------------------------------------------------------------------------ 26 27 ここに新しいコードを追加したいが、HTMLタグtd"処理中"の取得がよく分からない為、 28 現在は↑でSleep 10000 '10秒間とめる処理をしていますが、 29 HTMLが変化するスピードは、データ量とサーバー状態によって変わる 30 31------------------------------------------------------------------------------ 32 33 34 'IEのページ読み込みが完了することを待つ処理 35 Do While ie.Busy = True Or ie.readyState < READYSTATE_COMPLETE 36 DoEvents 37 Loop 38 '------------------------------------------------------------------------------ 39 ie.document.forms(2).submit 40 41
補足情報(Excel VBA ieでのクローリング)
上記のコードで、HTML上ではプログラムで
<td bgcolor="#FFFFFF"><font size="-1">処理中</font></td>が <input type="submit" value="ダウンロード"> の様に数秒後変化いたします。 (データ量とサーバーの状態により時間は変化します。)現在VBAでは、Sleepで10秒待つようにしていますが、
'アンカータグの表示内容が「ダウンロード利用履歴へ」後、
(objLink.Click後が、HTMLコードのページになります。)
ページ上の「処理中」であれば、2秒待って、
Refreshでページの更新を行い、
<input type="submit" value="ダウンロード">に変更になるまで
Loopを回して、変更後、一番最後の
ie.document.forms(2).submit へ
進みたいと考えております。
ifとLoopを使えば問題ないと認識しておりますが、
tdタグから処理中を指定する方法などが、
よく分かりません。
VBA初心者なもので、出来るだけ分かり易いコードを
ご教授いただければ幸いです。
よろしくお願いいたします。m(_ _)m
回答2件
あなたの回答
tips
プレビュー