【问题标题】:Headless browser for C# (.NET)? [closed]C# (.NET) 的无头浏览器? [关闭]
【发布时间】:2012-04-27 00:46:54
【问题描述】:

我(曾经)是一名 Python 开发人员,正在构建一个 GUI Web 抓取应用程序。最近我决定迁移到 .NET 框架并用 C# 编写相同的应用程序(这个决定不是我的决定)。

在 Python 中,我使用了 Mechanize 库。但是,我似乎在 .NET 中找不到任何类似的东西。我需要的是一个以无头模式运行的浏览器,它能够填写表单、提交表单等。JavaScript 解析器不是必须的,但它会非常有用。

【问题讨论】:

标签: c# .net browser automation web-scraping


【解决方案1】:

有一些选择:

  • WebKit.Net(免费)

  • Awesomium
    它基于 Chrome/WebKit,就像一个魅力。 有可用的免费许可证,但也有商业许可证,如果需要,您可以购买源代码 :-)

  • HTML Agility Pack(免费)(HTML 解析器库,不是无头浏览器)
    这有助于从 HTML 等中提取信息,并且可能对您的情况有用(可能与 HttpWebRequest 结合使用)

【讨论】:

  • 谢谢。嗯,如果我错了,请纠正我,但不是所有这些(或至少前两个)都需要创建用户界面(我从阅读文档中想到)?我需要的是一个无头浏览器,所以没有 GUI。
  • @Deusdies NO - 至少第二个(Awesomium)和第三个(HTML Agility Pack)链接完全无头......第一个链接我不确定......
  • @Deusdies 例如 Awesomium - 根据文档(请参阅 awesomium.com/docs/1_6_5/sharp_api),如果您想在 UI 中渲染它们,它会为您提供像素,如果不是,则不需要。
  • 对于通过 google 来到这里的任何人来说,HTML Agility Pack 不是无头浏览器,它只是一个与 web 客户端结合使用的 html 解析器。无头浏览器的功能远不止 9
  • 自从回答了这个问题后,Awesomium 看起来已经死了。 answers.awesomium.com/questions/6880/…
【解决方案2】:

更多解决方案:

  • PhantomJS - 全功能无头网络 浏览器。经常与 Selenium 一起使用,它可以让你 从 .NET 应用程序访问浏览器。
  • Optimus (nuget package)- 轻量级无头网络浏览器。它处于测试阶段,但在某些情况下已经足够了。

我曾经将两者都用于网络测试。但它们也适用于网页抓取。

【讨论】:

  • 始终欢迎提供指向潜在解决方案的链接,但请在链接周围添加上下文,以便您的其他用户了解它是什么以及它存在的原因。始终引用重要链接中最相关的部分,以防目标站点无法访问或永久离线。考虑到仅仅是指向外部站点的链接是Why and how are some answers deleted? 的一个可能原因
  • 谢谢你们。我已经更新了我的答案。
  • 过度宣传特定产品/资源可能会被社区视为垃圾邮件。看看help center,特别是What kind of behavior is expected of users? 的最后一部分:避免公开的自我推销。您可能还对How do I advertise on Stack Overflow? 感兴趣。
  • @Knyaz - 你有 Selenium 的工作示例吗?比方说,当一些 javascript 运行并从该 javascript 获取返回时。
  • @Knyaz,需要 Optimus 支持。请查看 optimus.net@yandex.ru。
【解决方案3】:

您可能正在使用 TrifleJS(目前处于测试阶段),或使用通过无窗口 ActiveX/COM API 与 IE 通信的 .NET WebBrowser 类进行类似的操作。

如果您对 JavaScript API(phantomjs 的端口)不感兴趣,您实际上将使用 Internet Explorer 的 Trident 引擎运行一个成熟的浏览器(不是 http 请求包装器),您可能仍然可以使用一些 C# 代码库来解决关键概念(自定义标头、cookie、脚本执行、屏幕截图渲染等)。

请注意,这也可以模拟不同版本的 IE,具体取决于您安装的内容。

【讨论】:

    猜你喜欢
    • 2015-02-11
    • 2011-09-28
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 2017-10-16
    • 2013-06-28
    • 2013-09-03
    相关资源
    最近更新 更多