使用WebBrowser处理页面

时间:2016-01-26 01:57:19

标签: c# winforms web

我在通过Web Browser向表单发送值时遇到问题。我的目标是在我的send中打开生成的页面之后,发布一个帖子,或者submit输入表单的值,并browser进行<form action="..." method="post" accept-charset="ISO-8859-1" name="postmodify" id="postmodify" class="flow_hidden" onsubmit="submitonce(this);smc_saveEntities('postmodify', ['subject', 'message', 'guestname', 'evtitle', 'question'], 'options');" enctype="multipart/form-data"> <input type="text" name="subject" tabindex="1" size="80" maxlength="80" class="input_text" /> <select name="icon" id="icon" onchange="showimage()"> <option value="xx" selected="selected">Default</option> <option value="thumbup">OK</option> <option value="thumbdown">Down</option> <option value="exclamation">Exclamation</option> <option value="question">question</option> <option value="lamp">lamp</option> <option value="smiley">smiley</option> <option value="angry">angry</option> <option value="cheesy">cheesy</option> <option value="grin">grin</option> <option value="sad">sad</option> <option value="wink">wink</option> </select> <textarea class="resizeble" name="message" id="message" rows="12" cols="600" onselect="storeCaret(this);" onclick="storeCaret(this);" onkeyup="storeCaret(this);" onchange="storeCaret(this);" tabindex="2" style="height: 175px; width: 100%; "></textarea> <input type="submit" value="Send" tabindex="3" onclick="return submitThisOnce(this);" accesskey="s" class="button_submit" /> </form>

形式:

WebBrowser oWebBrowser = new WebBrowser();
oWebBrowser.ScriptErrorsSuppressed = true;
oWebBrowser.Navigate("myLinkinInternet");

//button to posting
private void post_Click(object sender, EventArgs e)
{
    try
    {
        HtmlElement subject = oWebBrowser.Document.GetElementsByTagName("input")["subject"];
        if(subject != null)
        {  //attempt to set the subject
            subject.SetAttribute("value", subj);
            MessageBox.Show("subj");
        }

        HtmlElement ico = oWebBrowser.Document.GetElementById("icon");
        if (ico != null)
        { //attempt to set the icon
            ico.SetAttribute("value", m.traduzIcon(icon.Text));
            MessageBox.Show("icon");
        }


        HtmlElement message = oWebBrowser.Document.GetElementById("message");
        if (message != null)
        { //attempt to set the message
            message.InnerText = default;
            MessageBox.Show("default");
        }


        HtmlElement form = oWebBrowser.Document.GetElementById("postmodify");
        if (form != null)
        { //attempt to submit
            form.InvokeMember("submit");
            MessageBox.Show("submit");
        }
        //attempt to open the link poster
        ProcessStartInfo post = new ProcessStartInfo(oWebBrowser.Url.AbsoluteUri);
        Process.Start(post);

    }
    catch
    {
        MessageBox.Show("ERRO");
    }
}

C#:

MessageBox

运行时,它不显示Web Browser并打开我在myLinkInInternetint main() { int n =10000000000; vector<int> a; for (int i=0;i<n) a.push(i); return 0; } - 具有表单的那个)中定义的浏览器页面。谁能给我一个帮助?我不知道如何做到这一点,我的研究基于自己。

1 个答案:

答案 0 :(得分:0)

使用WebBrowser.InvokeScript方法,我通常运气好,而不是与DOM斗争。例如,如果可以,请在页面中添加脚本标记,其内容类似于

<script>
function PostForm(subj) {
  document.getElementsByName('subject').value = subj;
  document.getElementById('postmodify').submit();
}
</script>

你应该可以通过

来调用它
oWebBrowser.InvokeScript("PostForm", subj);

如果你不能直接将Javascript注入到源代码中,也许你可以使用类似于为similar SO question发布的代码动态添加它。

如果您确实想让方法正常工作,请务必了解控件的与名称为value的属性非常不同。此属性用于初始化控件的值,但不表示瞬时值。也许DOM元素有Value属性?

注意:我没有测试任何这些,所以我的代码或思考中可能存在错误。