- ベストアンサー
VBからブラウザの表示状態を確認する方法
- Visual Basic(ExcelVBAですが)からブラウザを操作する方法として、こちらのコーナーからいろいろとアドバイスをいただいて徐々に理解できてきたのですが、ブラウザの表示状態を調べるパラメータ、プロパティなどはあるのでしょうか。URLを指定してブラウザに表示させ、そのURLが存在するかどうかをチェックしたいです。
- 正常に表示された場合と、指定したURLが存在せずにエラーになる場合がありますが、エラーの場合も、(1)ブラウザが完全にエラーを出す、(2)ドメイン側で存在しないというメッセージのページを返す、という2通りがあり、判定が難しそうです。そもそもこれを一般的に識別することは無理なのでしょうか。
- (1)ブラウザがエラーを出す例 http://www.goo.ne.jp/nai/ (2)goo側で存在しないというメッセージを返す例 http://weather.goo.ne.jp/today/x003/index.html
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
すいません、 #3で、onreadystatechange が使えると書いていますが、 実際に試してみたところ、ExcelVBA からは、利用できないようです。 Do While req.readyState <> 4 DoEvents Loop のようにして下さい。
その他の回答 (3)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
#2>objIE.Busyみたいに読み込み中であることを返すプロパティはないんでしょうか? readyState が 3 の時通信中 4 の時完了 になるので、これをチェックするといいのですが、 onreadystatechange イベントが使えるので、イベントによるコールバックを使うのがポーリングするより良いと思います。 参考URLは、JScript によるサンプルですが、基本的には同じです。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
CreateObject("Microsoft.XMLHTTP") を使ってHTTPリクエストを出すことができます。 この場合、status プロパティを使ってサーバーが返してくるステータスコード statusText でその意味する英文を得ることができます。 でも、二度手間になるような気もするし そこまでする必要も無いような気がします。 http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/objects/obj_xmlhttprequest.asp
補足
ありがとうございます。 Statusを取ることはできましたが、応答に時間がかかってStatusが返ってこないままになるケースもあります。 objReq.Open "GET", ActiveCell.Offset(0, 1).Text objReq.send Do While ActiveCell.Text = "" ActiveCell.Value = objReq.StatusText If ActiveCell.Text = "" And Now > wt Then ActiveCell.Value = "Time Out" Exit Do End If Loop みたいなコードを書いてみましたが、objIE.Busyみたいに読み込み中で あることを返すプロパティはないんでしょうか? (URLのタイプミスを無くすため、システマチックにチェックしたいのです。)
帰ってきたhtmlなりtextに "Not Found" や "The requested URL /nai/ was not found on this server." や "指定されたページがみつかりませんでした。" などの含まれる文字列で判定するってのではダメですか?
お礼
BLUEPIXYさん、何度もありがとうございました。 No.4でアドバイスいただきました方法でバッチリ動きました。 本当に助かりました。