我需要使用表单中的webBrowser1导航到某个网址并执行某些操作:
webBrowser1.Url = new Uri(@url);
webBrowser1.Navigate(new Uri(@url));
var state = webBrowser1.ReadyState;
HtmlElementCollection links = webBrowser1.Document.GetElementsByTagName("a");
foreach (HtmlElement link in links)
{
if (link.InnerText != null)
{
if (link.InnerText.Equals("Log in"))
{
link.InvokeMember("Click");
webBrowser1.Document.GetElementById("templateLoginPopupUsername").InnerText = username;
HtmlElementCollection input = webBrowser1.Document.GetElementsByTagName("input");
foreach (HtmlElement item in webBrowser1.Document.All)
{
if (item.Name == "password")
{
item.InnerText = password;
break;
}
}
break;
}
}
}
页面仅在代码完全执行时加载,因此我无法对其执行任何操作。有没有办法强制浏览器加载?
答案 0 :(得分:0)
首先,您的代码在到达循环之前会崩溃。如果请求的页面未按时加载,则webBrowser1.Document
对象可能不可用。您应该在文档加载完成后执行此循环,即创建一个事件处理程序,例如这个
protected void DocumentCompletedHandler(Object sender, EventArgs e)
{
//Your code here
}
然后,要将此处理程序附加到webBrowser1
对象,请使用
webBrowser1.DocumentCompleted +=DocumentCompletedHandler;
但即便如此,在某些情况下也可能无效(请参阅this)。
此外,您的代码似乎是出于恶意目的。你不应该这样做。