主婦と.NETと犬のぶろぐ

奥様 と プログラム と お犬様 の 楽しい日常

目次

Blog 利用状況

ニュース

書庫

日記カテゴリ

2007年11月14日 #

WebBrowser で取得した HtmlDocument を編集して submit する

以下のような asp があった時に、通常のオペレーションでは Option1 ~ Option4 の値が選択されてサーバー側へ送信されますが、

<%
Dim message
If (Request.Form("requestTest_postback") <> "") Then
    message = "選択された値:" & Request.Form("test") & "<br>"
End If
%>
<html>
<head>
<title>test</title>
</head>
<body>
<form name="requestInput" method="post" action="requestTest.asp">
<%=message %>
    <select name="test">
        <option value="opt1" selected>Option1
        <option value="opt2">Option2
        <option value="opt3">Option3
        <option value="opt4">Option4
    </select>
    <input type="submit">
    <input type="hidden" name="requestTest_postback" value="true">
</form>
</body>
</html>

Select タグの中の Option タグ達にない値をサーバー側に送信したい場合、HTML を改ざんすれば OK なわけですが
WebBrowser の Navigate を呼んだ後に WebBrowserオブジェクト.Document を改ざんする事でも同様の事ができます。

Public Class Form1
    Private Sub btnNavigate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNavigate.Click
        Me.WebBrowser1.Navigate(Me.TextBox1.Text)
    End Sub

Private Sub btnSubmit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSubmit.Click If Me.WebBrowser1.Document Is Nothing Then Return Dim selects As HtmlElementCollection = Me.WebBrowser1.Document.GetElementsByTagName("select") For Each selectTag As HtmlElement In selects If selectTag.GetAttribute("name") = "test" Then ' select タグ かつ name 属性が test の時に option を無理やり追加してそれを選択させる Dim fuji As HtmlElement = Me.WebBrowser1.Document.CreateElement("option") fuji.SetAttribute("value", "ふじこ") selectTag.AppendChild(fuji) Dim len As String = CInt(selectTag.GetAttribute("length")) selectTag.SetAttribute("selectedIndex", (len - 1).ToString()) Exit For End If Next Dim formElement As HtmlElement = Me.WebBrowser1.Document.Forms(0) formElement.InvokeMember("submit") End Sub End Class

お仕事用です。
EditRequest.zip

posted @ 22:26 | Feedback (49)