在没有c#webbrowser控件的情况下控制webbrowser

时间:2012-07-03 00:22:40

标签: c# internet-explorer browser bots

我希望能够启动多个浏览器窗口并从中获取html,并像使用.net Web浏览器控件一样与它们进行交互。问题是c#web浏览器控件需要STA线程,这会使我的程序变慢并且容易出错。他们是一种可以与真正的IE浏览器甚至是Chrome,Firefox等进行对话的方式吗?

我知道有付费的第三方解决方案和东西,但我想知道是否有人知道任何可靠和有效的免费图书馆。我不能使用HttpWebRequest来做我正在做的事情,所以请不要这么做。

我将在Windows上运行并使用C#。

4 个答案:

答案 0 :(得分:2)

我使用过WebKit.NET。它是免费的,效果很好(支持flash,css,渲染正确,有一个javascript引擎)。对于你正在做的事情,它可能会或可能不会广泛。

http://webkitdotnet.sourceforge.net/

有很多指南,演示有一个功能齐全的标签系统。

编辑:我在玩弄它,并制作了演示的增强版

enter image description here

答案 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)