Phantomjs v.2.1 addCookie()始终返回错误

也是最近刚接触Phantomjs,打算用来爬一爬学校的信息门户海报(因为学校的海报有的是文字又有的是图片,图片的链接也比较奇怪:

my.**.edu.cn/attachmentDownload.portal?xxxxxxxxxxxxx

所以希望直接把网页的内容部分截图下来,因为需要登陆,所以需要用到cookies。然后我由官方API文件 http://phantomjs.org/api/知道了可以用 phantom.addCookie() 来添加cookies。

var login1 = {
    'name': 'Login.Token1',
    'value': '15***227',
    'path': '/',
}

if (phantom.addCookie(login1)) {
    console.log('Cookie_login1 success')
} else {
    console.log('Fail')
}

//............Fail

可是再实际用的时候发现怎么都不成功,永远都是Fail

因为感觉后面的叙述有些啰嗦以及些许的语焉不详,所以先上结论:

虽然它返回false,但是实际上操作是成功了的!

一开始以为是添加的Cookie有问题

Cookies

于是乎我到看到这个文章phantomjs截图的实践——

严苛的cookies格式

虽然他这么说可是官方文件里面没有这么说——
phantomjs_API文件 phantom.addCookie()
不过在介绍 'webpage' 类的 ‘addCookie’ 的时候有说明——
phantomjs_API文件 phantom.addCookie()

好吧,那就弄吧,于是我改成了这样

var login1 = {
    'name': 'Login.Token1',
    'value': '15***227',
    'path': '/',
    'domain':'https://www.baidu.com' //呵呵
}

if (phantom.addCookie(login1)) {
    console.log('Cookie_login1 success')
} else {
    console.log('Fail')
    
//............Fail

还是失败!我去怎么回事!(当然有同学可能已经发现这里的问题了。)

但无论如何......

后来我去Google找

Google

(吐槽一下,我本来还以为中国国内讨论技术的挺多的了,可是去搜phantomjs——少!太少了!)

于是在phantomjs的github官网上看到了这个今年三月的issues

那个....我升级到了v2.1,addcookies怎么老说失败啊

——恩,看来是个bug呢,在这里纠结了挺长时间的我说了一句“窝草”。

  1. 额,我英语不太好,帖子后面说'fixed',我就以为已经修复了,于是打算去升级 phantomjs。我再下了一遍官网的版本,可是问题还是在。
  2. 我就回帖子去,发现修复修复到了phantomas——‘what!这是什么?’(百度也没有告诉我。),个人感觉上像是试验田这类东西。
  3. 我又去用npm,brew,pip去尝试

    • npm 下不下来=。=
    • brew 里面更新没反应
    • pip 这个.....

——后来,后来,后来

var login1 = {
    'name': 'Login.Token1',
    'value': '15***227',
    'path': '/',
    'domain':'baidu.com'     //这里! 这里
}

if (phantom.addCookie(login1)) {
    console.log('Cookie_login1 success')
} else {
    console.log('Fail')
    
//............Fail

'domain' 好像不可以加协议(http:// https:// ftp://)【猜测】

不过最后还是Fail

就是这个时候

我他妈想起来,
那个....我升级到了v2.1,addcookies怎么老说失败啊的标题是:

addCookie always returns false in v2.1.1 #14047

用的是——return,return,return......

不是——fail,fail,fail

所以有可能实际上操作成功了,不过返回失败。

var login1 = {
    'name': 'Login.Token1',
    'value': '15***227',
    'path': '/',
    'domain':'baidu.com'     //这里! 这里
}

if (phantom.addCookie(login1)) {
    console.log('Cookie_login1 success')
} else {
    console.log('Fail')
    
cookies = phantom.cookies

console.log('Listing cookies:');
for(var i in cookies) {
    console.log(cookies[i].name + '=' + cookies[i].value);
}

//............Fail.......
//but return sometime!
//好日子 好日子
//啦啦啦♪(^∇^*)

真的是这样的。
总之就是虽然它返回false,但是实际上操作是成功了的!

【完】


RDDcoding
151 声望17 粉丝

一心一行