vb.netでフレーム内にアクセスするには?

解決


ごろう  2006-09-28 01:48:57  No: 96768

vb.netからフレーム内のテキストボックスとボタンをクリックしたいと思っています。

フレームでは無いページでは下記のコードで動作しているのですが
フレームページの指定方法がわかりません。

いろいろ調べて、試しては見たのですが...

具体的にはどの様に指定すれば良いのでしょうか?

よろしくお願いします。

Dim IE As New SHDocVw.InternetExplorer

IE.Visible = True
IE.Navigate("http://aaa.com/test.html")

'ログイン画面の必要な項目に値をセットしてサブミット
Dim doc As mshtml.HTMLDocument = CType(IE.Document, mshtml.HTMLDocument)
CType(doc.all.item("ID", 0), mshtml.HTMLInputTextElement).value = UID
CType(doc.all.item("PASS", 0), mshtml.HTMLInputTextElement).value = UID
CType(doc.forms.item(0, 0), mshtml.HTMLFormElement).submit()

開発環境
vb.net(vs2003) XP


ヤマ@文系  2006-09-28 01:59:24  No: 96769

同じような質問があったので、
そちらを参考になさってください。
http://hanatyan.sakura.ne.jp/vbbbs/wforum.cgi


ごろう  2006-09-28 02:56:45  No: 96770

ヤマ@文系さま
お返事ありがとうございます。

教えていただいたページをみてきましたが、vb6であったのとwebbrowserを使用した方法でした。

vb.netとshdocvwを使用した例題を見つけられませんでした。


ごろう  2006-09-28 03:38:01  No: 96771

Dim IE As New SHDocVw.InternetExplorer

IE.Visible = True
IE.Navigate("http://aaa.com/test.html")

'ログイン画面の必要な項目に値をセットしてサブミット
Dim doc As mshtml.HTMLDocument = CType(IE.Document, mshtml.HTMLDocument)
Dim frms As mshtml.FramesCollection = CType(doc.frames, mshtml.FramesCollection)

doc = CType(frms.item(0), mshtml.HTMLDocument)  …  (1)
CType(doc.forms.item(0, 0), mshtml.HTMLFormElement).submit()

上記の様なプログラムにしてみたのですが、(1)の部分で
”指定されたキャストは有効ではありません。”のエラーがでます。

HTMLDocumentに代入できれば、前に書いた方法でコントロールできると思うのですが...


ヤマ@文系  2006-09-28 04:22:56  No: 96772

navigateで呼び出して、ドキュメントが扱えるまで待つ必要があります。

'コード例-------------------------.Net 2005
Public Class Form1
    Const READYSTATE_INTERACTIVE = 3
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim IE As New SHDocVw.InternetExplorer

        IE.Visible = True
        IE.Navigate("http://www.testxxxxx.com/")
        Do

      If (IE.ReadyState > READYSTATE_INTERACTIVE) Then
        If (IE.ReadyState = SHDocVw.tagREADYSTATE.READYSTATE_INTERACTIVE) Or _
                (IE.ReadyState = SHDocVw.tagREADYSTATE.READYSTATE_COMPLETE) Then
                
                Dim doc As mshtml.HTMLDocument = IE.Document
               
 Console.Write(doc.body.outerHTML)'必要な処理に置き換えてください。
                Exit Do

            End If
            'End If
            Application.DoEvents()
            System.Threading.Thread.Sleep(500)

        Loop
    End Sub
End Class


ヤマ@文系  2006-09-28 04:24:25  No: 96773

If (IE.ReadyState > READYSTATE_INTERACTIVE) Then

'End If
は間違えてしまったので抜いてください。(^^;


ごろう  2006-09-28 20:30:56  No: 96774

ヤマ@文系 さま

お返事ありがとうございます。
上記サンプルではドキュメント表示までのwaitをはずしていました。
しかし、waitを入れても同じ状態でした。

Dim frms As mshtml.FramesCollection = CType(doc.frames.item(0), mshtml.FramesCollection)
doc = CType(frms.document, mshtml.HTMLDocument)

とする事で期待どうりの動作をする様になりました。

ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加