我希望能够启动多个浏览器窗口并从中获取html,并像使用.net Web浏览器控件一样与它们进行交互。问题是c#web浏览器控件需要STA线程,这会使我的程序变慢并且容易出错。他们是一种可以与真正的IE浏览器甚至是Chrome,Firefox等进行对话的方式吗?
我知道有付费的第三方解决方案和东西,但我想知道是否有人知道任何可靠和有效的免费图书馆。我不能使用HttpWebRequest来做我正在做的事情,所以请不要这么做。
我将在Windows上运行并使用C#。
答案 0 :(得分:2)
我使用过WebKit.NET。它是免费的,效果很好(支持flash,css,渲染正确,有一个javascript引擎)。对于你正在做的事情,它可能会或可能不会广泛。
http://webkitdotnet.sourceforge.net/
有很多指南,演示有一个功能齐全的标签系统。
编辑:我在玩弄它,并制作了演示的增强版
答案 1 :(得分:1)
Awesomeium是一个基于Webkit / Chromium(Chrome)的浏览器,您可以通过.NET包装器与之交谈,就像WebBrowser控件一样。我不确定STA的线程要求。
至于STA线程使您的应用程序“更慢且容易出错” - 这听起来很奇怪,也许您应该调查解决这个问题。
答案 2 :(得分:1)
对于IE(仅限)。自由: Microsoft Internet Controls
using SHDocVw;
Microsoft HTML对象库
using mshtml;
通过这些,您可以执行
之类的操作foreach (InternetExplorer brIns in _allWindows)
{
var htmlDoc = brIns.Document as HTMLDocument;
if (htmlDoc != null && htmlDoc.all.item(elementName) != null)
{
var elem = htmlDoc.all.item(elementName) as HTMLInputElement;
if (elem != null && attributeName == null)
{
_ieCurrentDoc = htmlDoc;
_currentHtml = htmlDoc.documentElement.outerHTML;
return true;
}
if (elem != null && elem.getAttribute(attributeName) != null)
{
_ieCurrentDoc = htmlDoc;
_currentHtml = htmlDoc.documentElement.outerHTML;
return true;
}
}
}
答案 3 :(得分:1)