0

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

我知道有付费的第三方解决方案和东西,但我想知道是否有人知道任何可靠且有效的免费库。我不能将 HttpWebRequest 用于我正在做的事情,所以请不要建议。

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

4

4 回答 4

2

我使用过 WebKit.NET。它免费且效果很好(支持 flash、css、正确渲染、具有 javascript 引擎)。对于您正在做的事情,它可能会也可能不会太广泛。

http://webkitdotnet.sourceforge.net/

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

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

在此处输入图像描述

于 2012-07-03T00:39:53.900 回答
1

Awesomeium是一个基于 Webkit/Chromium (Chrome) 的浏览器,您可以通过 .NET 包装器与之通信,就像 WebBrowser 控件一样。不过,我不确定 STA 线程要求。

至于 STA Threading 使您的应用程序“更慢且容易出错”——这听起来很奇怪,也许您应该研究解决这个问题。

于 2012-07-03T00:30:01.153 回答
1

对于 IE(仅限)。免费:Microsoft Internet 控制

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

                }
            }
于 2012-07-03T00:30:52.900 回答
1

或其他网络浏览器控件:http ://code.google.com/p/geckofx/

使用 GeckoFX 在 C# 中嵌入 Firefox 浏览器

于 2012-07-03T02:40:50.823 回答