【发布时间】:2015-11-05 18:57:35
【问题描述】:
我正在尝试使用 phantomjs 来自动化登录 facebook 的过程。问题是 facebook 在提交登录表单之前使用 js 代码设置 cookie。单击电子邮件输入框,登录表单可以触发设置 cookie 的 facebook js 代码,因此我创建了一个脚本以在登录前单击电子邮件框,但仍然出现“您的浏览器未启用 Cookie。请在您的浏览器首选项中启用 cookie 以继续。”信息。这是我的代码:
var page = require('webpage').create();
var data = {};
var fs = require('fs');
var CookieJar = 'cookie.json';
page.customHeaders = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0'
};
if (fs.isFile(CookieJar)) {
Array.prototype.forEach.call(JSON.parse(fs.read(CookieJar)), function(x) {
phantom.addCookie(x);
});
}
page.open('https://www.facebook.com/login.php', function(status) {
setTimeout(function() {
pageloaded();
setTimeout(function() {
afterclick();
}, 3000);
}, 3000);
function pageloaded() {
pagex = page.evaluate(function() {
function mouseclick(element) {
var event = document.createEvent(
'MouseEvents');
event.initMouseEvent('click', true,
true, window, 1, 0, 0);
element.dispatchEvent(event);
}
var element = document.querySelector('#email');
mouseclick(element);
});
}
function afterclick() {
data.content = page.content;
fs.write(CookieJar, JSON.stringify(phantom.cookies), 'w');
console.log(page.content);
phantom.exit();
}
});
此代码基本上是转到 facebook 登录页面,然后单击电子邮件输入框。最终结果应该是 cookie.json 文件包含 facebook 设置的 cookie,但我没有得到任何 cookie。我也尝试过使用 --cookies-file 命令行,在我看来 phantomjs 只能存储服务器端设置的 cookie?还是我做错了什么?
【问题讨论】:
-
目前尚不清楚您要做什么。您在“自动登录 Facebook 的过程”下是什么意思?使用 --cookies-file 命令参数,您可以存储 cookie(从而保存和重用 facebook 会话)。为什么要手动重新创建 cookie?
-
你做错了什么,试图“自动化”Facebook不希望你自动化的东西。
-
"使用 --cookies-file 命令参数,您可以存储 cookie(从而保存和重复使用 facebook 会话)。" - 我试过了,问题是它不起作用。我刚刚收到“您的浏览器未启用 Cookie。请在您的浏览器首选项中启用 Cookie 以继续。”页面加载后的消息。我上面发布的脚本不是完整版,我对其进行了修改,所以你们可以看到 phantomjs 没有存储由 javascript 设置的 cookie。我只是想知道读取js设置的cookie是否是phantomjs无法做到的,或者是我的问题。
-
奇怪的是,您总是收到“Cookies are not enabled”消息。也许在您的系统上存储 cookie 确实存在问题。您可以使用此设置登录到任何其他网站吗?
-
是的,我可以轻松登录到其他网站,甚至是 youtube。一定是因为 facebook 使用 javascript 来存储 cookie,这是我注意到 facebook 和我尝试过的其他网站之间的唯一区别。
标签: javascript facebook cookies phantomjs