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
同じような質問があったので、
そちらを参考になさってください。
http://hanatyan.sakura.ne.jp/vbbbs/wforum.cgi
ヤマ@文系さま
お返事ありがとうございます。
教えていただいたページをみてきましたが、vb6であったのとwebbrowserを使用した方法でした。
vb.netとshdocvwを使用した例題を見つけられませんでした。
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に代入できれば、前に書いた方法でコントロールできると思うのですが...
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
If (IE.ReadyState > READYSTATE_INTERACTIVE) Then
'End If
は間違えてしまったので抜いてください。(^^;
ヤマ@文系 さま
お返事ありがとうございます。
上記サンプルではドキュメント表示までのwaitをはずしていました。
しかし、waitを入れても同じ状態でした。
Dim frms As mshtml.FramesCollection = CType(doc.frames.item(0), mshtml.FramesCollection)
doc = CType(frms.document, mshtml.HTMLDocument)
とする事で期待どうりの動作をする様になりました。
ありがとうございました。
ツイート | ![]() |