Webページが完全に読み込まれるまでコードを一時停止するには、私はほぼすべての時間で大きな成功を収めています。この方法は、ページが完全にロードされ、そのコンテンツが抽出されていないと判断した後Excel VBAでは、Webページが完全に読み込まれているかどうかを確認する方法は何ですか?
Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop
しかし時折、私は、テキストコンテンツのロードを参照してください。
ただし、F8でコードをステップ実行すると、コンテンツが毎回抽出されます。これは、私がF8キーを繰り返し押すほど速く行われます。
コードがデータを引き続き抽出する前に、ページとそのすべてのコンテンツが完全に読み込まれていることを確認するにはどうすればよいですか?
どちらの場合も、IEは目に見えない形で実行されています。しかし、私はこれをIEで表示しようとしましたが、実際には私が作業しているページのこの特定の場所にコンテンツがあります。
これは、VBAスクリプトを使用してExcel 2016で実行されています。特定のコンテンツの要求は次のように書かれている:
私はドキュメントがロードされた後、多分値はデータをこするから誰を防ぐための努力で、追加取得していると思うので、私は Excel VBA: Wait for JavaScript execution in Internet Explorerて読んだ'get item name from page and write it to the first cell on the first empty row available
Set itemName = objIE.document.querySelector(".the-item-name")
Worksheets("Results").Range("A1048576").End(xlUp).Offset(1, 0).Value = itemName.innerText
。しかし、私はそれを行う可能性のあるスクリプトを特定することはできません。それがそこにないことを意味しません。私はまだそれを見ることができません。 -/each
:それは要求が返されるものですので、ロードされている価格に先立って、( - )この問題のページの
具体的な例としては、URL
https://www.homedepot.ca/en/home/p.dry-cloth-refills-32---count.1000660019.html
で最初product-total-price
div要素は、ダッシュが含まれています$11.29/each
の代わりに
私は回避策がありますが、それは私がそうしたいと思うほど効率的でも簡潔でもありません。私はダッシュの存在のために返された文字列をテストします。それがあれば、ループしてもう一度チェックし、それをキャプチャしてワークシートに挿入します。
setPriceUM:
Set hdPriceUM = objIE.document.querySelector(".product-total-price").innerText
hdPriceUMString = hdPriceUM.innerText
stringTest = InStr(hdPriceUMString, "-")
If stringTest = True Then
GoTo setPriceUM
Else
Debug.Print hdPriceUMString
End If
これを読んでいただき、ありがとうございます。
優秀な質問です。私はこの問題にも苦労していますが、幸いにも私が問題を解決したのは、オブジェクトが利用可能になるまでループした初期ループの後にループを追加することでした。だから、私の質問は:すべてのオブジェクトは、ページが完全に "ロード"後に利用可能ですか?例: 'Set SubmitBtn = doc.getElement .....' ...ランタイムエラーを表示する 'Nothing'ですか? –
私もこの問題に遭遇しましたが、通常はネットワークの問題です。ネットワークが高速で実行されているときは問題はありませんが、時間がかかり始めるとページが完全に読み込まれません。私は余分な時間を許すために待機タイマーを追加することに頼らざるを得なかった。 'Application.Wait(Now + TimeValue(" 0:00:06 "))'これは6秒の待機です。 – Mitch
@Mitch Timersは、特に低速ネットワークの場合、信頼性の低いソリューションです。 – omegastripes