c# - 使用 COM 对象进行浏览器自动化 .net
问题描述
阅读关于 COM 接口的小维基。通过论坛并试图吸收所有我能吸收的东西,似乎在 .NET 开发浏览器自动化控制台应用程序时,许多人不赞成使用它们。
什么是我平时的替代品
Dim ie As InternetExplorer
ie = New InternetExplorer
ie.Visible = True
ie.Navigate(website)
我不确定是否允许最佳实践类型的问题,但我很想知道这个问题的答案。主要是另一种选择,然后当然是简短的,为什么?多谢你们 :)!
解决方案
事实上,您可以在多线程+控制台/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;
}
推荐阅读
- javascript - (Javascript) 访问 Firebase RealtimeDatabase 中列表的最后一个元素
- c# - dbmail 有时在 sql 中停止
- c++ - 在 C++ 中测试默认操作
- angular - 如何在打字稿中声明和处理浮点类型?
- python - 为什么 pandas nsmallest 比 sort_values 快
- vim - 带有字符串连接的 Vim 设置选项
- javascript - 如何知道我的 JS 的哪一部分让它变得迟钝?
- ruby-on-rails - PortfoliosController#create 中的 ActiveRecord::AssociationTypeMismatch
- java - '/media/disk/sdk/build-tools/19.1.0/aapt'' 以非零退出值 1 结束
- laravel - Illuminate\Database\QueryException SQLSTATE[42P01]: Undefined table: 7 ERROR: during migration