PhantomJS是否支持Cookie?如果是,我在哪里可以找到API详细信息?
现在搜索一段时间后,我无法弄明白。
答案 0 :(得分:42)
是的,从1.7开始,Phantom已完成cookie处理,默认情况下已启用。 Cookie会在整个过程中保留。
如果你想在Phantom的运行中保留cookie,可以在command-line option cookies-file
指定存储持久性cookie的位置。
--cookies-file=/path/to/cookies.txt
指定存储持久性cookie的文件名。
在页面脚本中,您可以使用常规document.cookie
属性。与浏览器类似,此属性返回的字符串类似于将在Cookie:
HTTP标头中发送的字符串。
在Phantom脚本中,您可以通过page.cookies
访问页面的Cookie(通常来源限制),返回对象。
您还可以使用phantom.cookies
访问所有 Cookie(来自所有域)。
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
});
要add/edit/delete cookies,请使用addCookie
对象或deleteCookie
对象的clearCookies
,WebPage
和phantom
方法。< / p>
使用WebPage
对象的方法时,只修改页面可见的cookie。阻止访问其他域。
但是,使用phantom
的Cookie方法可以访问所有 Cookie。 phantom.addCookie
需要一个域(如果您未指定域,则WebPage.addCookie
会假定当前域),phantom.deleteCookie
会删除与指定名称匹配的任何 Cookie。
答案 1 :(得分:12)
它通过WebPage.addCookie() - 偶然无法正常工作对我和someone else都没有。
您可以改用:
phantom.addCookie({
'name': 'mycookie',
'value': 'something really important',
'domain': 'example.com'
})
page.open('http://example.com/url/path/', function() {
console.log(page.cookies);
})
答案 2 :(得分:1)
我必须做的工作就是直接执行javascript。我正在使用Geb并执行以下操作:
js.exec("document.cookie='PHPSESSID=${cookie}';")
当selenium失败时,我总是回到javascript以获得功能。
答案 3 :(得分:0)
我还没有尝试过,但--cookies-file=/path/to/cookies.txt
没有工作?
这是API引用中的第一项......
答案 4 :(得分:0)
我最近在会话中对评分进行了评分。你应该在页面对象中设置cookie,如下所示(coffeescript):
@page.clearCookies()
@page.addCookie
'name' : "JSESSIONID"
'value' : "0000rN3YAlVAU0xdHkKc6BEzWj9:-1"
'domain' : 'some.domain.com'
'path' : '/'