首页 > 解决方案 > 使用 COM 对象进行浏览器自动化 .net

问题描述

阅读关于 COM 接口的小维基。通过论坛并试图吸收所有我能吸收的东西,似乎在 .NET 开发浏览器自动化控制台应用程序时,许多人不赞成使用它们。

什么是我平时的替代品

    Dim ie As InternetExplorer

        ie = New InternetExplorer
        ie.Visible = True
        ie.Navigate(website)

我不确定是否允许最佳实践类型的问题,但我很想知道这个问题的答案。主要是另一种选择,然后当然是简短的,为什么?多谢你们 :)!

标签: c#vb.netinterfacecom

解决方案


事实上,您可以在多线程+控制台/winforms 应用程序中使用 Webbrowser 控件。

基于这个答案:在不同的线程中运行和控制浏览器控件

var html = RunWBControl("http://google.com").Result;

static public Task<string> RunWBControl(string url)
{
    var tcs = new TaskCompletionSource<string>();
    var th = new Thread(() =>
    {
        WebBrowserDocumentCompletedEventHandler completed = null;

        using (WebBrowser wb = new WebBrowser())
        {
            completed = (sndr, e) =>
            {
                tcs.TrySetResult(wb.DocumentText);
                wb.DocumentCompleted -= completed;
                Application.ExitThread();
            };

            wb.DocumentCompleted += completed;
            wb.Navigate(url);
            Application.Run();
        }
    });

    th.SetApartmentState(ApartmentState.STA);
    th.Start();

    return tcs.Task;
}

推荐阅读