0

このスニペットを使用して、要素に特定のテキストがあるかどうかをテストしようとしています。

HtmlDocument element = webBrowser2.Document;

if (element.GetElementById("gbqfsa").InnerText == "Google Search")
{
     HasSucceeded = 1;
}
return HasSucceeded;

ただし、最初の行で「指定されたキャストは無効です」という例外がスローされます。私は何を間違っていますか?

4

2 に答える 2

0

カスタム ユーザー コントロールから 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;
    }
}
于 2019-06-15T13:15:33.540 に答える