DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Webbrowser内のテキストボックス等の設定/取得方法

環境/言語:[環境:WindowsXP 使用言語:VB2005]
分類:[.NET]

VB2005で最近夢中になって学習している初心者です。

ご教授いただきたいのですが、

今行おうとしていることは、Windowsアップリケーションで、
Webbrowser内に表示されているあるホームページがあるのですが、
今表示中のページの中には、テキストボックスが数個とRadioButtonがやはり数個
あるのですが、これらのコントロールの値を設定または取得したいと思っています。
私は初心者ですので、APIは使いたくありませんし、無理です。

何とかVB2005のコードから設定/取得することは出来ないものでしょうか。
出来ましたら、簡単な例でも教えていただければ幸いです。

よろしくお願い致します。
2006/03/02(Thu) 22:10:55 編集(投稿者)

みくさん,こんばんは。

下のコードはHTMLからINPUTタグのテキスト入力フィールドとラジオボタンを抽出し,
その現在の値を表示します。
また,テキスト入力フィールドには「コードで設定します」という値を設定します。
このコードはWebBrowser.DocumentCompletedイベント以降に実行できます。
それ以前には実行できません。

    Private Sub WebBrowser1_DocumentCompleted( _
        ByVal sender As System.Object, _
        ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) _
        Handles WebBrowser1.DocumentCompleted
        For Each Element As HtmlElement In Me.WebBrowser1.Document.GetElementsByTagName("input")
            Select Case Element.GetAttribute("type")
                Case "text"
                    Debug.Print("テキスト入力フィールド : " & Element.GetAttribute("value"))
                    Element.SetAttribute("value", "コードで設定します")
                Case "radio"
                    Debug.Print("ラジオボタン : " & Element.GetAttribute("value"))
            End Select
        Next
    End Sub 

わからないことがあったらきいてください。
YASさん、ご回答ありがとうございます。
こんなに早く回答頂けるなんて思ってもいませんでした。

すみませんが、明日、自アプリへ取込んでみます。
(すみません、もう今日は疲れてしまいました。)

多分、分からないところもあると思います。
勝手ながら、十分に理解出来てから、「解消済み」にしたいと思います。

お手数お掛けしました。まずはお礼まで!
YASさん、昨日は早速のご回答、ありがとうございました。

確認させていただき、望んでいる事が出来るようです。

あと一つだけ、教えてください。
type="button"をVBのコードからクリックすることは出来ますでしょうか?

お世話になりますが、ご教授の程お願いします。
2006/03/03(Fri) 14:03:27 編集(投稿者)

> type="button"をVBのコードからクリックすることは出来ますでしょうか?

inputタグのtypeにbuttonは無かったように思います。

typeがsubmitかimageだとして,次のようになります....かと思ったら
動きませんね。なぜでしょう?(根本的に間違っているかもしれません)

Dim Elements As HtmlElementCollection = Me.WebBrowser1.Document.GetElementsByTagName("input")
For Each Element As HtmlElement In Elements
If Element.GetAttribute("type") = "image" Then
Element.RaiseEvent("onclick")
End If
Next

しかたがないので,MSHTMLを使うことにします。
IHTMLElement.clickイベントを遅延バインディングで呼び出しています。

Dim Elements As HtmlElementCollection = Me.WebBrowser1.Document.GetElementsByTagName("input")
For Each Element As HtmlElement In Elements
If Element.GetAttribute("type") = "image" Then
Dim DomElement As Object = Element.DomElement
DomElement.click()
System.Runtime.InteropServices.Marshal.ReleaseComObject(DomElement)
End If
Next
YASさん、ありがとうございました。

今回の件以外にも色々と分からないことが有ります。
また質問させて頂きますので、よろしくお願い致します。
解決済み!
>>type="button"をVBのコードからクリックすることは出来ますでしょうか?
> inputタグのtypeにbuttonは無かったように思います。

ありますよ。


> typeがsubmitかimageだとして,次のようになります....かと思ったら
> 動きませんね。なぜでしょう?(根本的に間違っているかもしれません)
>
> Element.RaiseEvent("onclick")

手元に環境が無いので試せないのですが……対象ボタンの click メソッドを
呼び出してみてはどうでしょう。(マネージDOM だと、InvokeMember でしたっけ?)

それで駄目なら、System.Windows.Forms.AccessibleObject.DoDefaultAction() で。
> ありますよ。
すみません。ありました。
手持ちのタグ辞典で調べるだけという手抜きをしてしまいました。

> 手元に環境が無いので試せないのですが……対象ボタンの click メソッドを
> 呼び出してみてはどうでしょう。(マネージDOM だと、InvokeMember でしたっけ?)

Dim Elements As HtmlElementCollection = Me.WebBrowser1.Document.GetElementsByTagName("input")
For Each Element As HtmlElement In Elements
If Element.GetAttribute("type") = "image" Then
Element.InvokeMember("click")
End If
Next

動作しました!
こんなメソッドがあったのですね。戻り値を調べても"click"ではCOMオブジェクト
を参照しないようですし,いいことを教えて頂きました。ありがとうございました。
魔界の仮面弁士さん、YASさん、アドバイスありがとうございます。

いろいろと調べて習得したいと思います。
「解消済み」後のご教授もありがたく受け入れたいと思います。

これからの学習のために、ここら当りの参考となるURLがありましたら
お教え願えませんでしょうか。独習したいと思います。

よろしくお願いいたします。

DOBON.NET | プログラミング道 | プログラミング掲示板