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

前端之家收集整理的这篇文章主要介绍了加载DOM并使用.Net执行javascript,服务器端前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想使用文档(字符串形式)或URL加载DOM,然后对它执行 javascript函数(包括jquery选择器).这将完全是服务器端,正在进行中,没有客户端/浏览器.

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

我看过.Net javascript引擎,如Jurassic和Jint,但都不支持加载DOM,因此不能做我需要的.

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

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

解决方法

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

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

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

如果您的需求实际上是HTML操作,并且它实际上不需要使用Javascript,但您正在考虑JS中可用的此类工具的丰富内容,那么我将查看为此目的而设计的C#工具.例如HTML Agility Pack,或者我自己的项目CsQuery,它是一个C#jQuery端口.

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

猜你在找的HTML相关文章