35

PhantomJS支持 cookie 吗?如果是,我在哪里可以找到 API 详细信息?

我现在搜索了一段时间后无法弄清楚。

4

5 回答 5

45

是的,从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,请使用对象或对象的addCookiedeleteCookieclearCookies方法。WebPagephantom

当您使用WebPage对象的方法时,您只修改页面可见的 cookie。对其他域的访问被阻止。

但是,使用phantom的 cookie 方法允许访问所有cookie。 phantom.addCookie需要一个域(WebPage.addCookie如果您不指定,则假定为当前域),并phantom.deleteCookie删除与指定名称匹配的任何cookie。

于 2012-02-29T18:47:29.030 回答
13

通过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);
})
于 2013-09-13T11:49:19.390 回答
1

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.

于 2016-11-04T17:24:56.220 回答
0

我最近在会话中对信息进行了评分。您应该在页面对象中设置 cookie,如下所示(coffeescript):

@page.clearCookies()
@page.addCookie
  'name'     : "JSESSIONID"
  'value'    : "0000rN3YAlVAU0xdHkKc6BEzWj9:-1"
  'domain'   : 'some.domain.com'
  'path'     : '/'
于 2014-07-23T06:22:25.427 回答
0

我还没有尝试过,但不起作用--cookies-file=/path/to/cookies.txt

这是API参考中的第一项...

于 2012-02-29T18:49:35.763 回答