我正在尝试使用此代码段来测试具有特定文本的元素。
HtmlDocument element = webBrowser2.Document;
if (element.GetElementById("gbqfsa").InnerText == "Google Search")
{
HasSucceeded = 1;
}
return HasSucceeded;
然而,第一行抛出异常“指定的强制转换无效”。我究竟做错了什么?
您是否可能使用了错误的 HtmlDocument 类?WebBrowser.Document 属于以下类型:
System.Windows.Forms.HtmlDocument
但我注意到还有另一个可能的命名空间:
System.Windows.Browser.HtmlDocument
我会检查以确保您包含的命名空间是System.Windows.Forms.HtmlDocument
当从我的自定义用户控件返回 HtmlDocument 作为属性时,我遇到了这个问题。(其中嵌入了 WebBrowser 控件)
错误原因是从其他线程访问文档。
/// <summary>
/// Error version '
/// </summary>
public HtmlDocument Document
{
get
{
// Throw error 'Specified cast is not valid'
return this.webBrowserMain.Document;
}
}
但我不知道为什么错误不是'CrossThread Operation access ...'但下一个代码解决了我的问题
/// <summary>
/// Fixed version
/// </summary>
delegate HtmlDocument DlgGetDocumentFunc();
public HtmlDocument GetDocument()
{
if(InvokeRequired)
{
return (HtmlDocument)this.webBrowserMain.Invoke(new DlgGetDocumentFunc(GetDocument), new object[] { });
}
else
{
return this.webBrowserMain.Document;
}
}