質問: VBはまったくの初心者なのですが、あるプログラムツールでIEを操作するプログラムを作っています(この言語ではactiveXと連携できる機能があります。)。 一般的なWebページのURLはLocationURLプロパティを問い合わせることで、取得できるところまではいったのですが、IDとパスワードを入力してログインするあるページだとこのやり方で取得できません(と最上部のアドレスが表示されるのみ。)。ただし、マウスで右クリックしてプロパティを選択するとちゃんとしたURLが分かりますので(のようになります。)、どうも意図的にLocationURLを用いて取得できないようにしてあるようです。この画面がjavascriptで作られているようなのですが、実際このように隠すことができるのでしょうか。 もし、この推測が正しいとして、VB、activeXのプロパティ、メソッドを使用してページのURLを取得する方法は無いでしょうか。 このページのソースも見れます。しかし、どれがセキュリティ的に開示しないほうがいいのか分からないのでとりあえず載せていません。
回答: こんにちは。KenKen_SP です。 情報不足で現状がさっぱりわかりません。情報を出し惜しみしていては回答 はもらい難いですよ。 > javascriptで作られているようなのですが、実際このように隠すことが > できるのでしょうか。 > と最上部のアドレスが表示されるのみ 単純にフレームページなのだと思います。この場合ブラウザにはフレームを 切っている...HTML タグで言えば、FRAMESET が書かれたページの URL しか 表示されません。 現在どのような方法で LocationURL を取っているのか知りませんが、IE オブジェクトを使っていると仮定し、VB で書けばこんな感じでフレーム毎 の URL や HTMLソースなんかは取得できます。 同じくフレームページの MSDN をサンプルにしてます。このページは 3つ の Document で構成されてます。 ...エラー処理は皆無なのできちんと作ってません。(; ́・ω・`)σ 間違いがあったり、意図の読み違いだった場合はスルーして下さい。では。 Sub Sample() Dim IE As Object Dim n As Long Dim i As Long Dim Url As String Const READYSTATE_COMPLETE = 4 Url = "" Set IE = CreateObject("InternetExplorer.Application") With IE .Visible = True .Navigate Url While .Busy Or .ReadyState <> READYSTATE_COMPLETE Wend n = IE.Document.frames.Length Debug.Print "【 Frames Count 】 " & CStr(n) For i = 0 To n - 1 With IE.Document.frames(i).Document Debug.Print "--------------------------------" Debug.Print "【 Document URL 】 " & .Url Debug.Print "--------------------------------" Debug.Print "【 Document Source 】" Debug.Print .documentElement.outerHTML End With Next End With End Sub