使用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.