PhantomJS
一、任务描述
本实验任务主要对PhantomJS进行一些基本操作,通过完成本实验任务,要求学生熟练掌握PhantomJS的操作,并对PhantomJS的基本操作进行整理并填写工作任务报告。
二、任务目标
1、掌握PhantomJS的使用
三、任务环境
Ubuntu16.04、Python2.7
四、任务分析
PhantomJS是一个基于webkit的JavaScript API,它使用QtWebKit作为它的核心浏览器的功能,使用webkit来编译解释执行JavaScript代码。任何你可以在基于webkit浏览器做的事情,它都能做到。它不仅是个隐形的浏览器,提供了诸如CSS选择器,支持的Web标准,DOM操作,JSON,HTML5画布,SVG等,同时也提供了处理文件I / O的操作,从而使你可以向操作系统读写文件等.PhantomJS的用处可谓非常广泛,如网络监测,网页截屏,无需浏览器的网站测试,页面访问自动化等。
五、任务实施
步骤1、环境准备
右击Ubuntu操作系统桌面,从弹出菜单中选择【Open in Terminal】命令 打开终端。
通过【cd /home】切换到home目录下。【ls】查看该目录下的所有内容。
图1 切换目录
【mkdir phantomJSCode】在home目录下创建phantomJSCode文件夹。
图2 创建文件夹
步骤2、PhantomJS操作
【cd phantomJSCode】切换到phantomJSCode目录下,【vim helloworld.js】回车后创建一个名为helloworld的JavaScript文件。
图3 创建JavaScript文件
回车后进入编辑框内,按键盘【i】进入编辑状态,输入如下程序。
第一句是在控制台输出“Hello World!”,第二句是终止phantom的运行,不然程序会一直运行,不会停止。
图4 便捷JavaScript文件
编辑完毕后,按【esc】退出编辑状态,【:wq】保存并退出编辑框,【phantomjs helloworld.js】执行helloworld的JavaScript文件。
图5 运行JavaScript文件
通过PhantomJS,一个网页可以被加载、分析和通过创建网页对象呈现。
【vim pageload.js】回车后创建一个名为pageload的JavaScript文件。
图6 创建JavaScript文件
回车后进入编辑框内,按键盘【i】进入编辑状态,输入如下程序。
首先用webpage模块创建一个page对象,然后通过page对象打开http://passport.shiyanbar.com/
网址,如果请求响应成功,则通过render方法将当前的页面保存为shiyanbar.png图片。
图7 编辑JavaScript文件
编辑完毕后,按【esc】退出编辑状态,【:wq】保存并退出编辑框,【phantomjs pageload.js】执行pageload的JavaScript文件。
会发现响应成功,在目录下生成一个名为shi shiyanbar.png图片,正是实验吧的登录界面。
图8 运行JavaScript文件
除了打开网页截图之外,也可以对网页进行测试。
【vim loadspeed.js】回车后创建一个名为loadspeed的JavaScript文件。
图9 创建JavaScript文件
回车后进入编辑框内,按键盘【i】进入编辑状态,输入如下程序。
首先使用webpage模块创建一个page对象,使用system模块获取系统对象system,并声明两个变量t和address,用来保存时间和传入参数。如果传入的参数的长度等于1,说明要加载的地址没有传入,进行提示并退出phantom。为什么等于1,因为phantomjs loadspeed.js 第一个参数是loadspeed.js。接着获取当前的时间,然后打开网页,获取加载完成后的时间,进行相减即可。
图10 编辑JavaScript文件
编辑完毕后,按【esc】退出编辑状态,【:wq】保存并退出编辑框,【phantomjs loadspeed.js】执行loadspeed的JavaScript文件。
图11 运行JavaScript文件
为了评估网页中的JavaScript代码,可以利用evaluate。这个执行时“沙盒式”的,不会去执行网页外的JavaScript代码。evaluate方法可以返回一个对像,然后返回值仅限于对象。不能包含函数(或闭包)。
【vim evaluate.js】回车后创建一个名为evaluate的JavaScript文件。
图12 创建JavaScript文件
回车后进入编辑框内,按键盘【i】进入编辑状态,输入如下程序。
通过document.title获取网页的标题。
图13 编辑JavaScript文件
编辑完毕后,按【esc】退出编辑状态,【:wq】保存并退出编辑框,【phantomjs evaluate.js】执行evaluate的JavaScript文件。
得到网页的标题为登录实验吧。
图14 运行JavaScript文件
PhantomJS可以对视图进行缩放和裁剪。通过【vim pageload.js】对pageload.js进行改动,修改内容如下。
PhantomJS既可以将页面转化为不同的文件格式,还可以对视图进行缩放和裁剪,主要用到page对象中两个非常重要的属性:viewportSize和clipRect。viewportSize是视区的大小,起作用可以看做是将打开的浏览器窗口进行缩放,clipRect是在这个视区中裁剪矩形的大小,需要四个参数,前两个基准点,后两个参数是宽高。
图15 编辑JavaScript文件
编辑完毕后,按【esc】退出编辑状态,【:wq】保存并退出编辑框,【phantomjs pageload.js】执行pageload的JavaScript文件。
【ls】同级目录下生成shiyanbar.pdf文件
图16 运行JavaScript文件
由于PhantomJS允许对网络流量进行检查,因此适合对网络行为和性能进行各种分析。当页面从远程服务器请求资源时,可以通过onResourceRequested和onResourceReceived回调跟踪请求和响应。
【vim netmonitor.js】回车后创建一个名为netmonitor的JavaScript文件。
图17 创建JavaScript文件
回车后进入编辑框内,按键盘【i】进入编辑状态,输入如下程序。
当接受到请求时,可以通过改写onResourceRequested和onResourceReceived回调函数来实现接收到资源请求和资源接受完毕的监听
图18 编辑JavaScript文件
编辑完毕后,按【esc】退出编辑状态,【:wq】保存并退出编辑框,【phantomjs netmonitor.js】执行netmonitor的JavaScript文件。
运行结果会打印出所有资源的请求和接收状态,以JSON格式输出。
图19 运行JavaScript文件