Rhino是一个开源的JavaScript实现,它完全使用Java语言开发,可以用于嵌入到Java应用程序中以向终端用户提供脚本功能。
根据官方网站 ( http://www.mozilla.org/rhino/ ) ,有下面的特征
- 实现所有 JavaScript 1.6 特性
- 脚本化java环境
- 提供一个执行javascript脚本的shell环境
- 一个javascript编译器可以使js文件转化为java类
- 一个javascript调试器
其实N年之前就听说过它了,只是一直没有想起来要应用,昨天突然遇到一个问题,用其他语言不太方便解决,就是要在服务器端模拟网页内的JS运行,来获取一定的信息(提供给爬虫用),所以突然想到这个东东,试了一下下,还蛮有趣的,下面是一些记录:
这里主要用到 它的shell环境
在ubuntu 里面
apt-get install rhino
后,可以用 rhino命令直接运行 rhino shell
rhino本身提供了一些可以功我们使用的容器对象和方法,比如 print 就是将字符串输出到标准输出上…
rhino -e ‘ [ javascript code] ‘ 可以用来直接执行一段javascript代码,比如:
Hello, RainX!
又比如一个实际的例子,针对 56.com 的视频结果页面id获取,我们可以进行测试一下, 如下面的地址:
http://www.56.com/u93/v_MzM3NzcwMzQ.html
检查它的 “更多分享代码“ 连接 : http://www.56.com/u93/share.php?id=33777034&p=1 里面的33777034就是视频的id,但是我们并不能直接通过源代码取到这个信息,因为这个链接是在js里面生成的,所以如果我们是后台的程序去读取的话,比如一个爬虫,就不能完整的进入并爬取这个地址,要解决这个问题,我们可以用rhino来实现对这类js的解释执行,得到id (当然如果在前端,直接用firebug更方便一些), 具体的方法我就不将了,可以看下面我简单提取的一段js代码,当然,是可以用rhino执行的
结果如下
{‘id’ : ’33777034′, ‘exercise’ : ‘n’, ‘space_taxis’ : ”, ‘user_id’ : ‘liankky’, ‘indexGood’ : ‘n’, ‘public’ : ‘y’, ‘downFlv’ : ‘n’, ‘bookup’ : ‘n’, ‘chk_yn’ : ‘y’, ‘author’ : ‘n’, ‘box’ : ‘save’, ‘from’ : ‘u’, ‘filesize’ : ’3509157′, ‘totaltime’ : ’115000′, ‘save_time’ : ’1209399959′, ‘send_time’ : ’0′, ‘public_time’ : ’0′, ‘img_host’ : ‘v138.56.com’, ‘URL_host’ : ‘c37.5q6.com’, ‘URL_pURL’ : ’18′, ‘URL_sURL’ : ’3′, ‘URL_URLid’ : ‘sc_mp4_120939995949′, ‘effectID’ : ’0′, ‘times’ : ’0′, ‘score’ : ’0′, ‘md5file’ : ’21a41589e372b5524031d35533cdbec4′, ‘score_count’ : ’1′, ‘pct’ : ‘u’, ‘EnId’ : ‘MzM3NzcwMzQ’, ‘channel’ : [’1′]}
解析上面的json就可以取到可爱的id了…
Comments are closed.