既然题主提了phantomjs和rhino,说明对这个还是有一定的了解和研究。须要理清的是:
phantomjs:基于webkit改来的无节目浏览器,本职上它是一个浏览器,不过跟平常我们用的浏览器不同的是它没有可视化的GUI,对外提供了一些插口虚拟主机 linux,我们通过这种插口操作phantomjs来加载页面,解析和处理js,截图等等,解析和渲染html、css和js那些都不须要我们操劳
rhino:本身只是java界拿来处理js脚本的一个脚本引擎,跟浏览器这些大而全的东西还差的远,摘一段官方的说明:“Rhino是一个完全使用Java语言编撰的开源JavaScript实现。Rhino一般用于在Java程序中,为最终用户提供脚本化能力。”,这儿主要反映了一个问题,看见没,人家也只是当一个脚本解释引擎,你传递进去它就执行,它不认识html这种文本,假如爬虫要解析页面上的js,须要你先对html上的js自己解析一遍,掏出来,放在rhino上面解释,解释完了之后又要保留这个Context,要晓得js在浏览器上执行都是有Context的,在JDK8上面寄居蟹壳又引进了Nashorn这个新的引擎,最重要的是对一些新的js句型和规范提供了支持,并且跟真正的浏览器js引擎相比还是有点差异,想必你也没据说过哪家的后端还专门为rhino/Nashorn提供兼容的吧?
其实不仅前面两个选择外,java界还有个无界面的浏览器htmlunitlinux 执行html中的js如何安装linux,虽然跟真的浏览器比还是差得远,也没人会真的把它当浏览器,要不,你如何没听过后端兼容过htmlunit?用处是跟java兼容,并且你也不用操劳这么多的js,先执行那个,后执行那个,哪些时侯要保存Context,保存哪些,完全不用操劳
最新的chrome也搞了个HeadlessChrome,当然就是无界面的chrome,不过这货刚下来不久,资料还比较少linux 执行html中的js,但是前期只能在mac和linux下用用,看官方的介绍才能获取渲染后的dom结构,截图和用nodejs进行操作(虽然跟phantomjs很像,不过phantomjs早已很久不更新了,并且前段时间主开发还跑路了,何况这货挺好认,反爬可以有个别特点辨识)
文章评论