C# 使用COM对象实现浏览器自动化.net
阅读COM界面上的小维基。浏览论坛,尽我所能,在.NET开发浏览器自动化控制台应用程序时,许多人似乎都不赞成使用这些应用程序 什么是我平常的选择C# 使用COM对象实现浏览器自动化.net,c#,vb.net,interface,com,C#,Vb.net,Interface,Com,阅读COM界面上的小维基。浏览论坛,尽我所能,在.NET开发浏览器自动化控制台应用程序时,许多人似乎都不赞成使用这些应用程序 什么是我平常的选择 Dim ie As InternetExplorer ie = New InternetExplorer ie.Visible = True ie.Navigate(website) 我不确定是否允许提出最佳实践类型的问题,但我很想知道这个问题的答案。主要是替代方案,当然还有一个简短的原因?谢
Dim ie As InternetExplorer
ie = New InternetExplorer
ie.Visible = True
ie.Navigate(website)
我不确定是否允许提出最佳实践类型的问题,但我很想知道这个问题的答案。主要是替代方案,当然还有一个简短的原因?谢谢你们 实际上,您可以在多线程+控制台/winforms应用程序中使用Webbrowser控件 根据这一回答:
感谢您回答这个问题,我们将继续选择它。但你们能不能回敬一下,解释一下为什么这样会更好?我仍然不明白为什么一个会比另一个好?我一直觉得web浏览器的控制就是将浏览器嵌入到应用程序中,以便用户更好地使用。再次感谢您的回复,真的很棒!嵌入到表单中或在后台线程中使用它,需要注意的重要一点是,您不应该阻止紧循环、thread.Sleep等创建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;
}