PhantomJS支持 cookie 吗?如果是,我在哪里可以找到 API 详细信息?
我现在搜索了一段时间后无法弄清楚。
是的,从1.7开始, Phantom 具有完整的 cookie 处理,默认启用。Cookie 会在流程的整个生命周期内保留。
如果您想在 Phantom 运行中保留 cookie,可以使用命令行选项cookies-file
指定存储持久性 cookie 的位置。
--cookies-file=/path/to/cookies.txt
指定用于存储持久 cookie 的文件名。
在页面脚本中,您可以使用常规document.cookie
属性。与浏览器一样,此属性返回一个类似于在Cookie:
HTTP 标头中发送的字符串。
page.cookies
在 Phantom 脚本中,您可以通过返回objects来访问页面的 cookie(受通常的来源限制)。
您还可以使用 访问所有cookie(来自所有域)phantom.cookies
。
var page = require('webpage').create();
page.open('http://example.com', function (status) {
page.evaluate(function() {
document.cookie; // => "test=test-value;"
});
page.cookies; // => [{
// domain: "example.com",
// expires: "Wed, 08 Jan 2014 00:00:00 GMT"
// httponly: false,
// name: "test",
// path: "/",
// secure: false,
// value: "test-value"
// }]
phantom.cookies; // contains ALL cookies in Phantom's jar
});
要添加/编辑/删除 cookie,请使用对象或对象的addCookie
、deleteCookie
和clearCookies
方法。WebPage
phantom
当您使用WebPage
对象的方法时,您只修改页面可见的 cookie。对其他域的访问被阻止。
但是,使用phantom
的 cookie 方法允许访问所有cookie。 phantom.addCookie
需要一个域(WebPage.addCookie
如果您不指定,则假定为当前域),并phantom.deleteCookie
删除与指定名称匹配的任何cookie。
通过WebPage.addCookie()可以做到——顺便说一句,这对我和其他人都不起作用。
您可以改用它:
phantom.addCookie({
'name': 'mycookie',
'value': 'something really important',
'domain': 'example.com'
})
page.open('http://example.com/url/path/', function() {
console.log(page.cookies);
})
The work around I had to do was to execute javascript directly. I am using Geb and did the following:
js.exec("document.cookie='PHPSESSID=${cookie}';")
When selenium fails I always fall back to javascript for functionality.
我最近在会话中对信息进行了评分。您应该在页面对象中设置 cookie,如下所示(coffeescript):
@page.clearCookies()
@page.addCookie
'name' : "JSESSIONID"
'value' : "0000rN3YAlVAU0xdHkKc6BEzWj9:-1"
'domain' : 'some.domain.com'
'path' : '/'
我还没有尝试过,但不起作用--cookies-file=/path/to/cookies.txt
?
这是API参考中的第一项...