【问题标题】:Using COM objects for browser automation .net使用 COM 对象进行浏览器自动化 .net
【发布时间】:2018-11-10 20:38:09
【问题描述】:

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

什么是我平时的替代品

    Dim ie As InternetExplorer

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

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

【问题讨论】:

    标签: c# vb.net interface com


    【解决方案1】:

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

    基于这个答案:Run and control browser control in different thread

    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;
    }
    

    【讨论】:

    • 感谢您回答这个问题,继续选择它。但是你能不能只评论一下为什么这会更好?我仍然对为什么一个会比另一个更好?我一直认为 Web 浏览器控件是将浏览器“嵌入”到您的应用程序中以供用户使用。再次感谢您的回复,真的很棒!
    • “嵌入”到表单中或在后台线程中使用它,重要的是要注意您不应该阻塞(紧密循环、Thread.Sleep 等)创建 WebBrowser 的线程.如果您只对网页抓取感兴趣,也可以使用html-agility-pack.net
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多