我在将WebBrowser对象导航到C#中的URL时将对象:System.Windows.Forms.HtmlElement
传递给方法,但是如果我将WebBrowser对象导航到另一个页面,则HtmlElement对象变为null。伪代码是:
//Code to navigate to a page
WebBrowser.Navigate("http://www.google.com");
//pass one of the page's element as parameter in a method
Method(HtmlElement WebBrowser.Document.Body.GetElementsByTagName("input")["search"]);
Method(HtmlElement Element)
{
//Works fine till now
MessageBox.Show(Element.InnerText);
//Code to navigate to another page
WebBrowser.Navigate("http://www.different_page.com");
//Here the Element object throws exception because it becomes null after another navigation to another website.
MessageBox.Show(Element.InnerText);
}
答案 0 :(得分:4)
Element
持有一个引用,因此它在第二个导航中失去了它的状态。在执行第二次导航之前,请尝试存储值类型(例如.InnerText
)。
答案 1 :(得分:1)
我找到了解决问题的方法。解决方案是创建一个临时WebBrowser对象,并将其中的Element作为OuterHtml直接传递到正文中,然后导航到该DOM文本,就像它是页面的响应HTML一样:
Method(HtmlElement Element)
{
MessageBox.Show(Element.InnerText);
WebBrowser WebBrowser = new WebBrowser();
WebBrowser.DocumentText = "<html><head></head><body>" + Element.OuterHtml + "</body></html>";
while (WebBrowserReadyState.Complete != WebBrowser.ReadyState)
Application.DoEvents();
MessageBox.Show(WebBrowser.Document.Body.InnerText);
}
现在我可以访问Element:WebBrowser.Document.Body
即使我将原始WebBrowser对象导航到另一个页面,它仍然存在。