使用nodejs模块PhantomJS进行页面自动化,因为PhantomJS可以加载和操纵网页,所以执行各种页面自动化任务是完美的。
DOM操作
由于脚本的执行就像在Web浏览器上运行一样,因此标准的DOM脚本和CSS选择器可以正常工作。
以下useragent.js示例演示如何读取id为textContent的元素的属性:qua
运行npm run phantomjs useragent.js,也可以在package.json的scripts项下面增加此条命令,方便在IDE中快速以phantomjs环境启动脚本
| 
					 0 1 2 3 4 5 6 7 8 9 10 11 12 13  | 
						var page = require('webpage').create(); console.log('The default user agent is ' + page.settings.userAgent); page.settings.userAgent = 'SpecialAgent'; page.open('http://www.httpuseragent.org', function(status) {   if (status !== 'success') {     console.log('Unable to access network');   } else {     var ua = page.evaluate(function() {       return document.getElementById('qua').textContent;     });     console.log(ua);   }   phantom.exit(); });  | 
					
上面的示例还显示了自定义远程Web服务器看到的User-Agent字符串的方法。
使用jQuery和其他库
从1.6版开始,您还可以使用以下方法将jQuery包含到页面中page.includeJs:
| 
					 0 1 2 3 4 5 6 7 8  | 
						var page = require('webpage').create(); page.open('http://www.sample.com', function() {   page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() {     page.evaluate(function() {       $("button").click();     });     phantom.exit()   }); });  | 
					
上面的代码片段将打开一个网页,将jQuery库包含到该页面中,然后使用jQuery单击所有按钮。然后它将从网页退出。
确保phantom.exit()在page.includeJs包含JavaScript库之前将语句放入,否则可能会过早退出。
网页实例
假设您有一个网页实例:
| 
					 0  | 
						var page = require('webpage').create();  | 
					
可以提取并执行什么?
属性
page.canGoForward -> boolean
如果window.history.forward是有效的操作
page.canGoBack -> boolean
如果window.history.back是有效的操作
page.clipRect -> object
可以设置为以下形式的对象:
| 
					 0  | 
						{ top: 0, left: 0, width: 1024, height: 768 }  | 
					
它指定屏幕截图中将显示屏幕的哪一部分
page.content -> string
整个页面的HTML内容
page.cookies -> object
cookies,它们具有以下形式:
| 
					 0 1 2 3 4 5 6 7  | 
						{   'name' : 'Valid-Cookie-Name',   'value' : 'Valid-Cookie-Value',   'domain' : 'localhost',   'path' : '/foo',   'httponly' : true,   'secure' : false }  | 
					
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。有关深入示例,请查看此示例: printheaderfooter.js.
page.plainText -> string
页面中的纯文本元素
page.scrollPosition -> object
当前滚动位置作为以下表单的对象:
| 
					 0  | 
						{ left: 0, top: 0 }  | 
					
page.settings -> object
当前只有useragent字符串的设置, e.g page.settings.userAgent = 'SpecialAgent';
page.title -> string
页面标题
page.url -> string
页面链接
page.viewportSize -> object
浏览器大小,格式如下:
| 
					 0  | 
						{ 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
 
处理程序/回调
所有页面事件的列表:
- onInitialized
 - onLoadStarted
 - onLoadFinished
 - onUrlChanged
 - onNavigationRequested
 - onRepaintRequested
 - onResourceRequested
 - onResourceReceived
 - onResourceError
 - onResourceTimeout
 - onAlert
 - onConsoleMessage
 - onClosing
 
有关更多信息,请查看深度示例: page_event.js.