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?
我通过在引发 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)