[[20180126132413]] 『VBAでのIE操作について』(ゆう) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBAでのIE操作について』(ゆう)

お世話になっております。掲題の件について、
Navigate以外でIEのオブジェクトにページ情報を代入する方法が知りたいのですが、調べても出で来ず…ご教授頂けますと幸いです。

Do Until i > UBound(dataList, 1)

    If dataList(i, 7) <> "‐" Then
        1…htmlDoc.getElementsByName("dspSBCD")(0).Value = dataList(i, 1)
        htmlDoc.getElementsByName("DCCD")(0).Value = dataList(i, 7)
        downloadB.Click…1
        linkFlg = 0
        Do
            2…Sleep 10000
            Set objIE2 = Nothing
            Set objIE2 = CreateObject("Internetexplorer.Application")
            openUrl = ""
            objIE2.Visible = True
            objIE2.navigate openUrl
            For Each obj In objIE2.document.getElementsByTagName("a")
                If obj.innerHTML = "csv" Then
                    linkFlg = 1
                    Exit For
                End If
            Next
            If linkFlg = 1 Then
                obj.Click…2
                Exit Do
            End If
        Loop
    End If
    i = i + 1
Loop

上記コードは、
?@あるページ内のフォームに情報を入力し、ボタンを押す。
小窓のページが別ウィンドウで表示される。
?A小窓ページ内にリンクされたCSVを開く。

という流れになっています。その中で、?@でボタンを押して出てきたページのHTMLドキュメントを読込みたいのですが、上記のようにNavigateしてからだと、ページの仕様上外部アクセスとなり、正しくページが表示されません。

そのため、現在開いているページからHTMLドキュメントを読込み、ボタンやリンク等の操作をしたいのですが、探しても見つかりません。

何か良い方法はありますでしょうか?

< 使用 Excel:Excel2010、使用 OS:Windows7 >


ご提示のコードは、ページを開いてから情報入力、ボタンクリックするまでであり、その後表示更新されたページを何も見ていませんね? 初回表示には10秒待つ事で同期を取っているようですが、同様にボタン押下後も完了同期を取ってから、新たにDocumentを調べましょう。(IEの表示が更新されているということは、Documentの中身も一新されているということ)
(???) 2018/01/26(金) 14:15

???さん

返信ありがとうございます。
Documentを取得しても、フォームのあるページの情報が取得されてしまいます。
フォーム送信で新たに開いた別ウィンドウのHTMLはどういう風に取得すればいいのでしょうか。
(ゆう) 2018/01/26(金) 14:31


小窓というのは、別IEが表示されるのでしょうか? それとも、JavaScriptのダイアログでしょうか?

JavaScriptダイアログならば、私はその中を調べる術を知らないのですが、別IEであれば、ボタンを押す前にプロセス名が「iexplore.exe」なものを全て取得しておき、ボタン押下後(別画面表示後)に再び「iexplore.exe」を取得することで、1つ増えたIEが目的の小窓だ、という事が判ります。ここからウィンドウハンドルを得る事もできますが、Documentまで辿り着けるかまでは自信なしです…。

小窓が別IEであり、徹底解析する意思がおありでしたら、プロセス名のチェックには「CreateObject("WbemScripting.SWbemLocator")」あたりをキーワードに調べてみてください。(問題のURLが判らないし、おそらく公開できる場所ではないでしょうから、私が試す訳にはいかないのです。ウィンドウハンドル表示までなら書けますが、それでもちょっと大変…)
(???) 2018/01/26(金) 17:25


もし小窓が別IEであり、ウィンドウタイトルに何らかの決まった文字列が表示されている場合、Shell.Application オブジェクトの windows から document.Title を調べる事で、自分で起動していないIEオブジェクトを得る事ができるようです。これなら簡単そうですが、小窓が何か次第ですね。
(???) 2018/01/26(金) 18:01

うまくいくか判りませんが、例えば既に開いているIEオブジェクトを得る例なぞ。(Google名部分は、小窓に表示されているタイトルで)

 Sub test()
    Dim IE As Object

    For Each IE In CreateObject("Shell.Application").Windows
        If IE.Name = "Internet Explorer" Then
            If IE.Document.Title Like "Google*" Then
                Exit For
            End If
        End If
    Next

    If IE Is Nothing Then
        MsgBox "見つかりません"
    Else
        MsgBox IE.LocationURL, , IE.Document.all.Length
    End If
 End Sub
(???) 2018/01/26(金) 18:16

???さん

沢山の助言を頂いたのに、お返事がこんなに遅くなってしまって申し訳ありません。
別窓は、見たところツールバーなどの表示が省略された、簡単なIEウィンドウのようです。

???さんの仰る通り、セキュリティの観点からURLは限られたネットワークでのみ機能するようで、私でも個人の環境で試すことは難しいです。(それがもどかしい…)
ただやはりHTMLの内容と実際の挙動を見る限りでは、別IEだと思われるので、???さんに提示頂いた

・iexplore.exeの数の比較で特定していく方法
・Shell.Application オブジェクトのタイトルを調べる方法
・既に開いているIEオブジェクトから特定していく方法

を、自分で理解し易いor確実に取得出来ることを軸に試行していこうと思います。
とても丁寧に、また幾つかキーワードも教えて頂いたので、以前に比べ大分道が開けました。
本当にありがとうございました。
(ゆう) 2018/01/29(月) 10:27


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.