在Linux CLI中解释和执行任意JavaScript

11

我一直在寻找方法来完成这个任务,但是一直没有找到正确的方式。

任务:从Linux命令行执行Javascript。

例如:让二进制文件或任何将解释Javascript代码的程序加载一些.js文件,然后打印某个变量的值。

更具体的例子:我想在对http://www.vureel.com/video/2809/American-Dad页面进行Javascript解释和执行之后,获取该页面的最终版本。如果你使用Firebug查看该页面,你会发现这段难以理解的Javascript

<script language="JavaScript" type="text/javascript">/*<![CDATA[*/var a,s,n;function a8bcb4f34dfd6e81cfdb9c115d1671582(s){r="";for(i=0;i<s.length;i++){n=s.charCodeAt(i);if(n<128){n=n ... etc ...</script>

被转化为了嵌入代码

<embed height="390" width="642" flashvars="file=http://vureel-cdn-2.vureel.com/leechingisillegal/537c69afbcaf4c7cf416f30077bbe9d1/4a29621d/here/2809.flv ...etc .../>

这只是一个例子,但希望你明白我的意思。


我认为你的问题应该改名为类似“如何在JS执行后获取页面源代码”的内容。我不认为讲解如何使用V8执行代码会对你有所帮助,是吗? - Martin Thoma
5个回答

7

2
Node.js是目前这些选项中使用最广泛的。 - We Are All Monica

3
您所提到的问题分为两个方面:1)在浏览器外执行JavaScript 2)在网页上查看JavaScript运行的结果。
对于第一个问题,mozilla rhino是一个在Java中运行的JavaScript解释器。您可以通过命令行来执行JavaScript代码。
对于第二个问题,可以查看Firebug的DOM选项卡,在JavaScript运行后,您可以看到生成的文档元素。
或者您也可以启用脚本调试功能,保存页面的本地副本并插入debug()语句。

FYI - 最后那个提示是关于Win/Visual Studio的,而你说你在Linux上,所以可能不适用。 - Tim Hoolihan
我目前正在研究Spidermonkey,因为有一个Perl库可以与它通信。据我所知,Rhino基本上是相同的东西,但是针对的是Java而不是C。 - Artem Russakovskii
对于第二个问题,你的解决方案就像查看Firebug的输出一样好,但我需要能够在命令行上获取它,因此使用浏览器不是一个选项。 - Artem Russakovskii
我已经成功地使用Spidermonkey在我的示例中运行了那段Javascript代码。继续研究,看看如何将整个站点或js文件列表直接输入。 - Artem Russakovskii

2

请看http://phantomjs.org/

它是一个无头浏览器,因此您可以像在真正的浏览器中一样构建DOM并操纵它。显然,您可以导出结果。


2

如果你选择使用env.js,自博客发布版本以来已经有一些工作来使其更好地匹配浏览器。代码位于http://github.com/jeresig/env-js/tree/master。还有几个分支具有额外的功能。 - Matthew Crumley

0
如果你喜欢Python,你可以从GitHub上获取ghost.py,这个库允许你创建一个 headless、WebKit浏览器,并且在你的Python脚本中控制它。我通过IPython Notebook交互式地使用过这个库,开箱即用效果很不错。我还扩展了它与BeautifulSoup一起使用,效果很棒。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接