在InvokeMember(“ click”)之后未调用.NET WebBrowser DocumentCompleted事件

时间:2018-09-28 12:19:55

标签: c# .net webbrowser-control

我试图使用System.Windows.Forms WebBrowser类导航到网站以解析其内容。不幸的是,该请求首先被重定向到隐私策略站点,在该站点中,系统会提示用户先确认按钮,然后再将其定向到原始URL。

要解决此问题,我根据以下答案编写了一个小型控制台应用程序:

https://stackoverflow.com/a/4271581/9703315

class Program
{
    static void Main(string[] args)
    {
        new Importer().ImportWebsite();
    }
}

class Importer
{
    public void ImportWebsite()
    {
        RunBrowserThread(new Uri("http://..."));

        Console.ReadLine();
    }

    private void RunBrowserThread(Uri url)
    {
        var thread = new Thread(() => {

            var browser = new WebBrowser();
            browser.DocumentCompleted += Browser_DocumentCompleted;
            browser.Navigate(url);
            browser.ScriptErrorsSuppressed = true;

            Application.Run();
        });

        thread.SetApartmentState(ApartmentState.STA);
        thread.Start();
    }

    void Browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        var browser = sender as WebBrowser;

        var buttonContainer = browser.Document.GetElementById("consentButtonContainer");
        if (buttonContainer != null)
        {
            var button = buttonContainer.GetElementsByTagName("BUTTON");
            button[0].InvokeMember("click");

            Console.WriteLine("click");
        }

        var html = browser.Document.GetElementsByTagName("HTML");
        var doc = html[0].OuterHtml;

        Console.WriteLine(doc);
    }



}

首先,我创建一个新的WebBrowser对象并导航到所需的URL。加载网站后,将触发DocumentCompleted事件。然后,将检查HtmlDocument是请求的站点还是隐私策略站点。隐私权政策将有一个带有按钮确认的容器。如果找到了这些,我可以使用InvokeMember()方法单击该按钮并触发重定向。

这时我需要一些指导。现在,我希望在单击按钮后加载所需的站点时会再次触发DocumentCompleted事件。这永远不会发生。在按钮上使用InvokeMember(“ click”)之后,我是否需要采取一些其他步骤,或者为什么从未调用DocumentCompleted?

0 个答案:

没有答案