c#webBrowser.Document:回发后重新加载页面

dre*_*der 5 html c# webbrowser-control

我正在开发一个简单的应用程序,它自动浏览包含两个下拉菜单和一个按钮的页面.该页面如下所示:

------ DropDown1 -------

------ DropDown2 -------

-------按钮---------

现在,问题是,内容DropDown2是通过选择动态生成的Dropdown1.

我在c#中编写了这样的代码:

private void webBrowser1_DocumentCompleted(object sender, 
        WebBrowserDocumentCompletedEventArgs e)
{
    HtmlElement elem = webBrowser1.Document.GetElementById("DropDown1");
    elem.SetAttribute("selectedIndex", "1");
    elem.RaiseEvent("onChange");
    HtmlElement elem = webBrowser1.Document.GetElementById("DropDown2");
    elem.SetAttribute("selectedIndex", "5");
    elem.RaiseEvent("onChange");
}
Run Code Online (Sandbox Code Playgroud)

在引发onChange事件之后,浏览器会加载新值但我无法获取并设置该DropDown2值,因为文档仍然认为DropDown2s值为空.

如何获取和设置生成的新值DropDown2

dre*_*der 2

我通过在引发 onChange 事件后调用“__doPostBack”脚本找到了解决方案。当我调用 doPostBack 时,文档会重新加载,因此我可以检索新值。继承人的代码:

    private void BeginOperation()
    {
        webBrowser1.Navigate("somewebpage", false);
        Task = 0;
    }
    private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        HtmlElement elem;

        switch (Task)
        {
            case 0:
                //HtmlDocument mydoc = webBrowser1.Document;
                 elem = webBrowser1.Document.GetElementById("ddlCity");
                MessageBox.Show(elem.All.Count.ToString());
                elem.SetAttribute("selectedIndex", "1");
                //elem.RaiseEvent("onChange");
                object[] args = {"someparameters"};
                webBrowser1.Document.InvokeScript("__doPostBack",args);
                Task++;
            break;
            case 1:
                elem = webBrowser1.Document.GetElementById("ddlDistrict");
                elem.SetAttribute("selectedIndex", "2");
                elem.RaiseEvent("onChange");
                object[] args2 = {"someparameters"};
                webBrowser1.Document.InvokeScript("__doPostBack",args2);
                Task++;
            break;
        }
     }
Run Code Online (Sandbox Code Playgroud)