PhantomJS是否支持cookie?

时间:2012-02-29 18:40:36

标签: javascript cookies phantomjs

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

现在搜索一段时间后,我无法弄明白。

5 个答案:

答案 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对象的clearCookiesWebPagephantom方法。< / 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'     : '/'