加载 DOM 并使用 .Net 在服务器端执行 javascript

Load a DOM and Execute javascript, server side, with .Net

本文关键字:服务器端 执行 javascript Net DOM 加载      更新时间:2023-09-26

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

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

我看过.Net javascript引擎,如侏罗纪和Jint,但都不支持加载DOM,因此无法完成我需要的事情。

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

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

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

但正如你所指出的,你仍然需要一个 DOM。在纯C#中,有XBrowser,但它看起来有点陈旧。整个浏览器DOM也有基于javascript的表示形式,比如jsdom。你可能可以在侏罗纪运行jsdom,给你一个没有浏览器的DOM模拟,全部用C#(尽管可能很慢!它肯定会在 V8 中运行良好。如果您超出 .NET 领域,还有其他支持更好的解决方案。这个问题讨论 HtmlUnit。然后是Selenium,用于自动化实际的网络浏览器。

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

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

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