我正在一个简单的应用程序上工作,该应用程序会自动在包含两个下拉菜单和一个按钮的页面中浏览。该页面如下所示:
现在的问题是,通过选择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");
}
引发
onChange
事件后,浏览器将加载新值,但由于文档仍然认为DropDown2
的值为空,因此我无法获取并设置DropDown2
值。如何获取和设置
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;
}
}
关于标签C#webBrowser.Document : reloading page after postback,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5168278/