页面自动化
因为PhantomJS可以加载和操作一个web页面,因此可以很好地执行页面的各种自动化操作。
DOM 操作
因为脚本就像在web浏览器上执行一样,所以标准的DOM脚本和CSS选择器可以工作得很好。
下面的脚本useragent.js
演示了读取id为myagent
的dom元素的textContent
内容:
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('myagent').textContent;
});
console.log(ua);
}
phantom.exit();
});
上面的示例还演示了一个可以让远程web服务器看到我们自定义的用户代理的方法
使用jQuery和其他库
在1.6版本中,您还可以将jQuery库引入到您的页面中。includeJs的使用如下:
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()
});
});
上面的代码片段将打开一个web页面,同时将jQuery库引入到页面中,然后使用jQuery的方法单击所有按钮。之后退出页面。请确保在页面中放置执行exit语句。includeJs或其他方法可能在javascript代码被引入之前就退出了。
webpage 实例
假设你声明了一个webpage实例:
var page = require('webpage').create();
之后哪些方法或属性可以被提取和执行呢?
属性
- page.canGoForward -> boolean
判断 window.history.forward 是否是一个可执行行为。
- page.canGoBack -> boolean
判断 window.history.back 是否是一个可执行行为。
- page.clipRect -> object
可以被设置成以下形式的对象:
{ top: 0, left: 0, width: 1024, height: 768 }
它指定了屏幕需要被截图的部分。
- page.content -> string
当前页面的整个html内容
- page.cookies -> object
网页cookies, 形式大概如下:
{
'name' : 'Valid-Cookie-Name',
'value' : 'Valid-Cookie-Value',
'domain' : 'localhost',
'path' : '/foo',
'httponly' : true,
'secure' : false
}
- page.customHeaders -> object
TODO
- page.event -> object
包含modifiers 和 key属性,格式大概如下
{
'modifiers' : {
"shift" : 33554432,
"ctrl" : 67108864,
... : ...,
}
'key' : {
"0" : 48,
"1" : 49,
... : ...,
}
}
-
page.libraryPath -> string
当前的库路径,通常是指当前执行的脚本所在的目录
-
page.loading -> boolean
判断页面是否正在加载
-
page.loadingProgress -> number
页面加载进度。 值为100 意味着页面加载完成。
-
page.navigationLocked -> boolean
TODO
-
page.offlineStoragePath -> string
sqlite3 localstorage和其他离线数据存储的位置。
-
page.offlineStorageQuota->number
可以离线存储的字节数
-
page.paperSize -> object
类似于clipRect,但采用A4纸张大小的尺寸。详细了解使用可查看例子
-
page.plainText -> string
请求页面中的纯文本
-
page.scrollPosition -> object
页面当前滚到到的位置,对象格式如下:
{ left: 0 top: 0 }
-
page.settings -> object
页面设置
-
page.title -> string
The page 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
句柄/回调函数
所有页面事件列表:
- onInitialized
- onLoadStarted
- onLoadFinished
- onUrlChanged
- onNavigationRequested
- onRepaintRequested
- onResourceRequested
- onResourceReceived
- onResourceError
- onResourceTimeout
- onAlert
- onConsoleMessage
- onClosing
更多信息请查看 例子。