ホームページの構成、通信状況によって要素を取得できずエラーになる場合があります。
対策をとったのですが、それでもたまにエラーとなるためご助言を頂きたいです。
とった対策は、要素取得前に objIE.document.all(0).OuterHTML に特定の文字があれば要素を取得するというようにしました。しかし、objIE.document.all(0).OuterHTML自体を取得できずにエラーとなる場合があります。その際は、そのまま実行するとそのままエラーなく通過しその後の要素を取得できます。
このたまにでるエラーを回避したいです。
ちなみに、IEのBusy待ち等の基本的なのは全て入れているつもりです。
またsleepを可能な限り入れればよいのですが、速さを求めているためsleepは基本使わない対策とりたいです。
objIe.document.all(0).outerhtmlよりもっと確実に取得できる術はないでしょうか?
ちなみにwhileでループさせて、文字列の有無をチェックしています。たとえ、IEが全てをロードできてないにしても、何か文字列のカケラでもエラーなく取得したいです。
(本音は、Busy待ちいれているのでそうなってほしくないのですが)
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
こんばんは。
>通信状況によって要素を取得できずエラー
Error コードは出ているはずですから、エラーのとり方はご存知だとは思いますが。
objIE.document.all(0).OuterHTML
もし、そこで失敗を認知しているとしたら、私が経験するのは、LocationURL とかの、希望のURLが取れていない可能性があります。(現実に、それで私は対処しています。しかし、サイトのエラーの時、エラーページに飛ぶので、その時は、Busy は利きません。タイムラグが必要です。)
例:私の場合
Const KEYWORD = "oshiete"
With ObjIE
If InStr(1, .LocationURL, KEYWORD, vbTextCompare) = 0 Then
MsgBox "did not reach the destination", 48
GoTo EndLine
End If
End With
もちろん、下記の方法もありかもしれませんが。
Do
OHT =objIE.document.all(0).OuterHTML
Len(OHT) >10 Then Exit Do
Loop While objIE.Busy Or objIE.ReadyState <> 4
または、document.all.length >0 で見分けます。
よほど単純なサイトでないと、document.all は使いません。
With ObjIE
.document.getElementsByTagName("a")
.document.getElementsByClassName("q_text")
>速さを求めているためsleepは基本使わない対策とりたいです。
Win API のSleep は遅くはありません。しかし、私が使わない理由は、使ってもオブジェクトなどのデータが得られるか確実性がないからです。取れない時は、もう取れないとして、一旦離脱するのがよいと思います。
速さだけだったら、ご存知でしょうけれども、DOMもあります。
Dim objHTTP As WinHttpRequest
objHTTP.Open "GET", strURL, False
objHTTP.Send
とすればよいのですが、動的なサイトや認証のあるところでは、極めて成功率が低いのです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- オープンソース Python openpyxlを使用したセル番地の使用について 1 2023/08/03 22:05
- Visual Basic(VBA) Selenium Basicの件 5 2023/04/10 20:55
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- Visual Basic(VBA) VBAでのMATCH関数 3 2022/10/17 19:06
- Excel(エクセル) EXCELの外部データ取得ができない 1 2023/03/23 09:03
- プリンタ・スキャナー キャノンmp490プリンター【エラー番号5400】で【プリンタートラブルが発生しました。電源を入れ直 2 2023/07/24 17:45
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- Visual Basic(VBA) Vba 配列の中の特定文字列の位置の調べ方 9 2022/05/23 17:46
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
ActiveCell.FormulaR1C1の変数
-
実行時エラー'-2147467259(8000...
-
On ErrorでエラーNoが0
-
【VBA】ワークブックを開く時に...
-
VBAでfunctionを利用しようとし...
-
pythonのopenpyxlについて
-
マクロで"#N/A"のエラー行を削...
-
python初心者です。
-
String""から型'Double'への変...
-
インポート時のエラー「データ...
-
グラフを表示するとき「’~’メソ...
-
日付書式のString型からData型...
-
実行時エラー 438 の解決策をお...
-
フランスの生年月日(jj/mm/aaaa)
-
VBA IE要素 objIE.document.all...
-
ApplicationとWorksheetFunctio...
-
Excel vbaについての質問
-
VBでSQL文のUPDATE構文を使った...
-
VBスクリプトでIEの404 not fou...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
String""から型'Double'への変...
-
VBAでfunctionを利用しようとし...
-
マクロで"#N/A"のエラー行を削...
-
【VBA】ワークブックを開く時に...
-
文字列内で括弧を使うには
-
実行時エラー 438 の解決策をお...
-
On ErrorでエラーNoが0
-
お助けください!VBAのファイル...
-
VBA データ(特定値)のある最...
-
インポート時のエラー「データ...
-
実行時エラー'-2147467259(8000...
-
ACCESSで値を代入できないとは?
-
VB.net 重複チェックがしたいです
-
ActiveCell.FormulaR1C1の変数
-
ApplicationとWorksheetFunctio...
-
「実行時エラー '3167' レコー...
-
【VB.NET】 パワポ操作を非表示で
-
フランスの生年月日(jj/mm/aaaa)
-
【マクロ】 IFERROR関数をマク...
おすすめ情報