加载DOM和执行JavaScript,服务器端,与.net(Load a DOM and Execu

2019-06-25 04:23发布

我想加载使用文档(以字符串形式)或URL的DOM,然后针对它执行JavaScript功能(包括jQuery选择)。 这将是完全的服务器端,在过程中,没有客户端/浏览器。

基本上我需要加载DOM,然后使用jQuery选择和文本()&型VAL()函数来从中提取字符串。 我并不真的需要操作DOM。

我看过的.Net JavaScript引擎,如侏罗纪和Jint,但是都不支持加载DOM等于是不能做什么,我需要。

我愿意考虑非净解决方案(node.js中,红宝石等),如果他们存在,但真的喜欢.NET。

编辑下面的是一个很好的答案,但我目前正在尝试一种不同的路线,我试图端口envjs侏罗纪。 如果我可以得到的工作,我认为它会做我想做的,敬请期待....

Answer 1:

答案取决于你正在尝试做的。 如果你的目标基本上是一个完整的Web浏览器的模拟,或“无头的浏览器,”有一些解决方案,但没有人(据我所知)在.NET干净存在。 为了模拟一个浏览器,你需要一个JavaScript引擎和DOM。 你已经确定了几个引擎; 我发现侏罗纪是两个最强劲,速度最快。 谷歌Chrome的V8发动机也很受欢迎; 该Neosis Javascript.NET项目提供了一个.NET包装它。 这不是很纯.NET,因为你有一个non-.NET依赖,但它集成了干净,不麻烦,使用。

但是,正如你提到的,你仍然需要一个DOM。 在纯C#有Xbrowser中 ,但它看起来有点陈旧。 有整个浏览器的DOM一样的基于JavaScript的表示jsdom了。 你很可能在侏罗纪运行jsdom,给你一个DOM模拟没有浏览器,都在C#(虽然可能很慢!)这肯定会运行V8就好了。 如果你得到了.NET领域之外,还有其他更好的支持解决方案。 这个问题讨论的HtmlUnit。 此外,还有硒自动化实际的网络浏览器。

此外,记住,有很多围绕这些工具所做的工作是进行测试。 虽然这并不意味着你不能使用他们别的东西,他们可能不执行或任何种类的在线生产代码稳定的使用很好地集成。 如果你正在尝试基本上做实时HTML操作,则溶液中混合了大量的技术不是没有被广泛使用,除了用于测试可能是一个糟糕的选择。

如果您需要的实际上是HTML的操作,它并不真正需要使用JavaScript,但你会更多地考虑在JS提供这种工具的财富,那么我想看看为此而设计的C#的工具。 例如HTML敏捷性包 ,还是我自己的项目CsQuery ,这是一个C#jQuery的端口。

如果你基本上是试图获取可用于客户端写了一些代码,但在服务器上运行 - 例如用于精密/加速网页抓取 - 我四处搜寻使用这些术语。 例如这个问题讨论了这一点,有答案包括PhantomJS ,无头WebKit浏览器堆栈,以及一些我已经提到的测试工具。 对于网络刮,我会想象你可以没有这一切在.NET平台上,这可能是唯一合理的答案呢。



文章来源: Load a DOM and Execute javascript, server side, with .Net