因为phantomjs能加载和操纵页面,它可以自动化地完美执行页面的各种操作。

操作文档:

脚本的被执行,就像它真的正在web 浏览器上运行一样。

下面的脚本,是读取元素id为myagent的文本内容

//导入webpage模块,创建一个实例var page = require('webpage').create();
//输出页面默认的userAgent
console.log("The default Useragent is :" + page.settings.userAgent);
//修改页面默认的userAgent
page.settings.userAgent = "SpecialAgent";
//打开网页面
page.open("http://www.httpuseragent.org",function(status){
if(status != 'success'){
console.log("Unable to access network");
}else{
      //执行js代码
var usa = page.evaluate(function(){
return document.getElementById("myagent").textContent;
});
console.log(usa);
}
phantom.exit();
})

  

  

2、从1.6版本开始,你可以使用page.includeJs加载jquery到页面中

var page = require("webpage").create();
page.open("http://www.sample.com",function(){
    引用jquery,执行回调函数
page.includeJs("http://code.jquery.com/jquery-2.2.4.min.js",function(){
        // evaluate执行JS
page.evaluate(function(){
$("button").click();
})
        退出phantomJs,必须写在includeJs里面,否则可能jquery没加载完成,便结束了phantom
phantom.exit();
})
})

  

3、如果我们现在有一个webpage实例,我们能做些什么呢?

属性:

	page.canGoForward --> boolean
window.history.forward是否是一个有效的操作
page.canGoBack --> boolean
window.history.back 是否是一个有效的操作
page.clipRect --> boolean
可以使用以下方式设置成一个对象{top: 0, left: 0, width: 1024, height: 768},它指定将会拍摄屏幕截图的哪部分。
page.content --> string
整个页面的HTML内容
page.cookies -->object
当前页面的cookies
page.customHeaders -->object
TODO
page.event -->object
包含键的修改和TODO
page.libraryPath -->string
当前库的路径,通常指被执行脚本的路径
page.loading -->boolean
页面是否正在加载
page.loadingProgress -->number
页面加载进度,100意味着页面加载完成
page.navigationLocked -->boolean
TODO
page.offlineStoragePath -->string
下线数据或sqlite3数据在本地存储的位置
page.offlineStorageQuota -->number
可离线存储的配额
page.paperSize -->object
类似clipRect,但采用实际纸张尺寸,例如A4.
page.scrollPosition -->object
用以下形式表示的当前滚动位置
{left:0
top:0
}
page.settings -->object
useragent串的设置
page.title -->string
当前页面的TITLE
page.url -->string
当前页面的URL
page.viewportSize -->object
用以下形式表示的浏览器大小{width:1024,height:768}
page.windowName -->string
由WM分配的浏览器窗口的名字
page.zoomFactor -->number
缩放系数,默认为1.

  函数

page.childFramesCount
page.childFramesName
page.close
page.currentFrameName
page.deleteLater
page.destroyed
page.evaluate
page.initialized
page.injectJs
page.javaScriptAlertSent
page.javaScriptConsoleMessageSent
page.loadFinished
page.loadStarted
page.openUrl
page.release
page.render
page.resourceError
page.resourceReceived
page.resourceRequested
page.uploadFile
page.sendEvent
page.setContent
page.switchToChildFrame
page.switchToMainFrame
page.switchToParentFrame
page.addCookie
page.deleteCookie
page.clearCookies
page.click()
page.refresh()

  事件

onInitialized
onLoadStarted
onLoadFinished
onUrlChanged
onNavigationRequested
onRepaintRequested
onResourceRequested
onResourceReceived
onResourceError
onResourceTimeout
onAlert
onConsoleMessage
onClosing

  

phantomJs页面操作的更多相关文章

  1. 父页面操作iframe子页面的安全漏洞及跨域限制问题

    一.父子交互的跨域限制 同域情况下,父页面和子页面可以通过iframe.contentDocument或者parent.document来交互(彼此做DOM操作等,如父页面往子页面注入css). 跨域 ...

  2. 【Egret】实现web页面操作PC端本地文件操作

    Egret 实现web页面操作PC端本地文件操作: http://edn.egret.com/cn/book/page/pid/181 //------------------------------ ...

  3. Asp.Net Core 2.0 项目实战(11) 基于OnActionExecuting全局过滤器,页面操作权限过滤控制到按钮级

    1.权限管理 权限管理的基本定义:百度百科. 基于<Asp.Net Core 2.0 项目实战(10) 基于cookie登录授权认证并实现前台会员.后台管理员同时登录>我们做过了登录认证, ...

  4. 在子页面操作父页面元素和iframe说明

    实现功能:在子页面操作父页面元素. 在实际编码的过程中,大家一定有这种需求:在父级页面有一个<iframe scrolling='auto'></iframe>内联框架,而我们 ...

  5. 高并发分布式系统中生成全局唯一(订单号)Id js返回上一页并刷新、返回上一页、自动刷新页面 父页面操作嵌套iframe子页面的HTML标签元素 .net判断System.Data.DataRow中是否包含某列 .Net使用system.Security.Cryptography.RNGCryptoServiceProvider类与System.Random类生成随机数

    高并发分布式系统中生成全局唯一(订单号)Id   1.GUID数据因毫无规律可言造成索引效率低下,影响了系统的性能,那么通过组合的方式,保留GUID的10个字节,用另6个字节表示GUID生成的时间(D ...

  6. selenium - 常用页面操作

    # 2.常用页面操作 # 访问某一个页面url = 'http://www.baidu.com'driver.get(url) # 获取页面的标题title = driver.titleprint(t ...

  7. 关于网站登录后的页面操作所携带的不同cookie值

    对于课堂派网站,登录后的页面操作只需要携带PHPSESSID或者cookie中间那部分即可,两个都带也可,SERVERID不知道是干啥的,每次响应的都会变. 代码实现: cookie = None c ...

  8. HTML5+和MUI页面操作

    最近总是碰到针对页面的一些操作,以下是针对webview的一些简单方法以及个人理解.更多详尽的内容请参考标准文档:http://www.html5plus.org/doc/zh_cn/webview. ...

  9. SRX550路由器缓存满了无法在web页面操作解决方法

    SRX550路由器缓存满了无法在web页面操作解决方法   首页出现下图为满的标志,我这个文档就是解决这中情况,让web页面可以操作的 1.  打开命令行,输入用户密码,进入路由器 注意:这里使用te ...

随机推荐

  1. 【转】asp.net mvc(模式)和三层架构(BLL、DAL、Model)的联系与区别

    原文地址:http://blog.csdn.net/luoyeyu1989/article/details/8275866 首先,MVC和三层架构,是不一样的. 三层架构中,DAL(数据访问层).BL ...

  2. 正则中str.match(pattern)与pattern.exec(str)的区别

    这两个函数除了调用对象以及参数不同之外,<javascript高级程序设计>中对exec描述比较详细,对match只是说返回数组跟exec一样.书中并没有说只说了正则在非全局模式下的情况, ...

  3. Android之Activity界面跳转--生命周期方法调用顺序

    这本是一个很基础的问题,很惭愧,很久没研究这一块了,已经忘得差不多了.前段时间面试,有面试官问过这个问题.虽然觉得没必要记,要用的时候写个Demo,打个Log就清楚了.但是今天顺手写了个Demo,也就 ...

  4. [笔记] Python字符串

    1.字符串是以单引号'或双引号"括起来的任意文本 比如'Mifen',"Amd794",'-956-$*'等等.注意:不能单双引号组合,涉及字符串中存在单双引号出现,应用 ...

  5. if 和case

    select case 'O' when 'O' then (1*5-6) when 'C' then (1*5-6) when 'EC' then (1*5-6) --else null --end ...

  6. c#基础学习(0629)之导出Excel方法

    给予NPOI插件的方法,所以首先要下载NPOI插件:vs项目中点击“项目”==>“管理NoGet程序包”==>搜索“NPOI”然后下载==>using引入Controller代码: ...

  7. 给model模型传数组参数

    $res = $this->Company->companyDischarge($this->user_id,array(0=>'c.limit_sum>0',1=> ...

  8. mysql + excel 校正线上数据

    积分问题处理 1. 所有应补汇总 select driver_id, SUM(integral) from detail_score group by driver_id; 2. 原汇总积分 sele ...

  9. bzoj P3309 DZY Loves Math——solution

    对于正整数n,定义f(n)为n所含质因子的最大幂指数.例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10007)=1, f(1)=0.给定正整数a,b,求: $$\sum_{i= ...

  10. springboot项目的重定向和转发

    下面是idea软件创建的项目目录,这里总结了一下转发与重定向的问题,详解如下. 首先解释一下每个文件夹的作用,如果你是用的是idea创建的springboot项目,会在项目创建的一开始resource ...