Bro*_*ook 7 .net javascript jint envjs jurassic
我想使用文档(字符串形式)或URL加载DOM,然后对它执行javascript函数(包括jquery选择器).这将完全是服务器端,正在进行中,没有客户端/浏览器.
基本上我需要加载dom然后使用jquery选择器和text()&type val()函数从中提取字符串.我真的不需要操纵dom.
我看过.Net javascript引擎,如Jurassic和Jint,但都不支持加载DOM,因此不能做我需要的.
我愿意考虑非.Net解决方案(node.js,ruby等),如果它们存在,但我们更喜欢.Net.
编辑 下面是一个很好的答案,但目前我正在尝试不同的路线,我试图将envjs移植到侏罗纪.如果我可以开始工作,我认为它会做我想做的事,请继续关注....
Jam*_*rgy 13
答案取决于你想要做什么.如果您的目标基本上是一个完整的Web浏览器模拟或"无头浏览器",那么有许多解决方案,但它们(我所知道的)中没有一个在.NET中完全存在.要模仿浏览器,您需要一个javascript引擎和一个DOM.你已经确定了几个引擎; 我发现侏罗纪是最强劲和最快的.谷歌Chrome V8引擎也很受欢迎; 该Neosis Javascript.NET项目提供了一个.NET包装它.它不是非常纯粹的.NET,因为你有一个非.NET依赖,但它集成了干净,并没有太多麻烦使用.
但正如您所指出的,您仍然需要一个DOM.在纯C#中有XBrowser,但它看起来有点陈旧.还有像jsdom这样的整个浏览器DOM的基于javascript的表示.您可以在Jurassic中运行jsdom,在没有浏览器的情况下为您提供DOM模拟,所有这些都在C#中(虽然可能非常慢!)它肯定会在V8中运行得很好.如果您不在.NET领域之外,还有其他更好的支持解决方案.这个问题讨论了HtmlUnit.然后是Selenium用于自动化实际的Web浏览器.
另外,请记住,围绕这些工具完成的许多工作都是用于测试.虽然这并不意味着您不能将它们用于其他内容,但它们可能无法在内联生产代码中执行或集成以用于任何类型的稳定使用.如果您尝试基本上进行实时HTML操作,那么混合使用许多技术的解决方案可能是一个糟糕的选择.
如果您的需求实际上是HTML操作,并且它实际上不需要使用Javascript,但您正在考虑JS中可用的此类工具的丰富内容,那么我将查看为此目的而设计的C#工具.例如HTML Agility Pack,或者我自己的项目CsQuery,它是一个C#jQuery端口.
如果你基本上试图采取一些为客户端编写的代码,但是在服务器上运行它 - 例如用于复杂/加速的网络抓取 - 我会使用这些术语进行搜索.例如,这个问题讨论了这个问题,答案包括PhantomJS,一个无头webkit浏览器堆栈,以及我已经提到的一些测试工具.对于网络抓取,我想你可以在没有它的情况下生活在.NET中,这可能是唯一合理的答案.