Gee*_*esu 17 cookies xmlhttprequest phantomjs
尝试使用PhantomJS登录时,我发现了一个有趣的问题.我不知道为什么它真的发生了.
基本上你启动一个远程调试器,如下所示:
/usr/local/bin/phantomjs --web-security=no --remote-debugger-port=13379 --remote-debugger-autorun=yes /tmp/test.js
Run Code Online (Sandbox Code Playgroud)
在远程调试器中:
> location.href = "https://www.mysite.com/login"
> $('input[name="username_or_email"]').val('blah@email.com')
> $('input[name="password"]').val('wrongpassword')
> $('button[type="submit"]').submit()
Run Code Online (Sandbox Code Playgroud)
在Chrome中执行此操作会在XHR请求后给我正确的"错误密码"消息,而使用phantomjs会给我一个通用错误,因为没有使用phantomjs发送cookie(我检查了标题).
我很困惑为什么phantomjs不发送带有POST请求的cookie.有谁知道我们怎么能让phantomjs发送带有所有请求的cookie呢?设置cookie文件也没有任何区别.
小智 1
好的,这似乎与会话 cookie 有关,而不是常规 cookie。
这里有一个关于负责 phantomjs cookie 功能的开发人员和一些与你有同样问题的人的帖子。
https://groups.google.com/forum/#!msg/phantomjs/2UbPkIibnDg/JLV9jBKxhIQJ
如果您不想浏览整个文件,基本上:Phantomjs 的行为就像普通浏览器一样,当浏览器关闭时(在您的情况下,当脚本执行结束时)它会删除所有会话 cookie。
因此,即使您设置了--cookies-file=/path/to/cookies.txt选项,您也只会在其上存储常规 cookie,以供后续执行。
有两种可能的方法适合您。一是在同一脚本中发出所有请求,二是手动存储和恢复 cookie。
在线程上,您可以使用几个函数来执行此操作。
function saveCookies(sessionCookieFile, page) {
var fs = require("fs");
fs.write(sessionCookieFile, JSON.stringify(page.cookies));
}
function restoreCookies(sessionCookieFile, page) {
var fs = require("fs");
var cookies = fs.read(sessionCookieFile);
page.cookies = JSON.parse(cookies);
}
var page = require('webpage').create();
Run Code Online (Sandbox Code Playgroud)
而且,如果一切都失败了……
您可以下载源代码并重新编译 phantomjs
您需要编辑src/cookiejar.cpp并删除或注释purgeSessionCookies();
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
1743 次 |
| 最近记录: |