【问题标题】:Load a DOM and Execute javascript, server side, with .Net使用 .Net 加载 DOM 并在服务器端执行 javascript
【发布时间】:2012-06-04 18:20:53
【问题描述】:

我想使用文档(以字符串形式)或 URL 加载 DOM,然后对其执行 javascript 函数(包括 jquery 选择器)。这将完全是服务器端,正在处理中,没有客户端/浏览器。

基本上我需要加载 dom,然后使用 jquery 选择器和 text() & type val() 函数从中提取字符串。我真的不需要操纵 dom。

我看过 .Net javascript 引擎,例如 Jurassic 和 Jint,但都不支持加载 DOM,因此无法满足我的需求。

如果存在非 .Net 解决方案(node.js、ruby 等),我愿意考虑,但我更喜欢 .Net。

编辑 下面是一个很好的答案,但目前我正在尝试不同的路线,我正在尝试将 envjs 移植到侏罗纪。如果我能做到这一点,我认为它会做我想做的事,请继续关注....

【问题讨论】:

  • 怎么来的?我很想从这样的项目中受益或做出贡献,因为我做了自己的尝试,但暂时停滞不前。如果您愿意,只需将@gmail.com 添加到我的 SO 名称中,您就可以在那里与我联系。我有一个将 ActiveX 添加到侏罗纪的 JavaScript 项目:jurascript.codeplex.com

标签: javascript .net jint envjs jurassic


【解决方案1】:

答案取决于您要做什么。如果您的目标基本上是一个完整的 Web 浏览器模拟或“无头浏览器”,那么有许多解决方案,但没有一个(据我所知)完全存在于 .NET 中。要模仿浏览器,您需要一个 javascript 引擎和一个 DOM。您已经确定了一些引擎;我发现侏罗纪是最强大和最快的。 google chrome V8引擎也很受欢迎; Neosis Javascript.NET 项目为其提供了一个 .NET 包装器。它不是很纯的 .NET,因为您有非 .NET 依赖项,但它集成得很干净,使用起来并不麻烦。

但正如您所指出的,您仍然需要一个 DOM。在纯 C# 中有XBrowser,但它看起来有点陈旧。整个浏览器 DOM 也有基于 javascript 的表示形式,例如 jsdom。您可能可以在侏罗纪中运行 jsdom,在没有浏览器的情况下为您提供 DOM 模拟,全部在 C# 中(虽然可能非常慢!)它肯定会在 V8 中运行得很好。如果您在 .NET 领域之外,还有其他得到更好支持的解决方案。 This question 讨论 HtmlUnit。然后是Selenium 用于自动化实际的网络浏览器。

另外,请记住,围绕这些工具所做的很多工作都是为了测试。虽然这并不意味着您不能将它们用于其他用途,但它们可能无法很好地执行或集成在内联生产代码中的任何稳定用途。如果您尝试基本上进行实时 HTML 操作,那么混合了许多除了测试之外未被广泛使用的技术的解决方案可能是一个糟糕的选择。

如果您的需求实际上是 HTML 操作,并且它并不真正需要使用 Javascript,但您更多地考虑 JS 中可用的此类工具的财富,那么我会考虑为此目的设计的 C# 工具。例如HTML Agility Pack,或者我自己的项目CsQuery,这是一个C# jQuery 端口。

如果您基本上是在尝试获取一些为客户端编写的代码,但在服务器上运行它——例如对于复杂/加速的网络抓取——我会使用这些术语进行搜索。例如this question 讨论了这个问题,答案包括PhantomJS,一个无头webkit 浏览器堆栈,以及我已经提到的一些测试工具。对于网络爬虫,我想你可以在没有 .NET 的情况下生活,这可能是唯一合理的答案。

【讨论】:

  • CsQuery 可以充当侏罗纪的 DOM(带有一点包装层)吗?
  • CsQuery 的 DOM 实现与浏览器非常不同,因为 C# 是一种强类型语言,而 javascript 不是。为此目的仅使用已经用javascript编写的jsdom会容易得多-理论上它应该在侏罗纪中按原样运行,尽管我不知道是否有人以前尝试过。 (实际上我开始从 jsdom 借用 CsQuery 的单元测试)。
  • 我一直在研究这个 - 你需要一些侏罗纪中没有的东西,但是还有另一个名为 jurascript 的项目,它具有所需的零碎东西。 jurassic.codeplex.com/discussions/360450
  • 我真的希望有人有时间和精力来解决这个问题。我喜欢侏罗纪,如果它只是去掉粗糙的边缘,我会在各种项目中使用它。它应该是 .NET 无头浏览器的核心!但是我还不能让它在我的情况下工作,并且缺乏保存和加载已编译 DLL 的能力令人沮丧,并且对于很多用途来说太慢了。 (我知道其他人一直在努力,但我从来没有能够完全使它在我的情况下工作)。我只是有太多其他项目要处理这个,而 V8+wrapper 可以工作(如果丑陋的话)。
  • 我们应该设置一个kickstarter :)
猜你喜欢
  • 1970-01-01
  • 2014-11-17
  • 2014-11-24
  • 2011-06-06
  • 2013-05-23
  • 1970-01-01
  • 2014-09-07
  • 2018-09-06
  • 2020-04-13
相关资源
最近更新 更多