2
我正在嘗試使用phantomjs來自動登錄Facebook的過程。問題是Facebook在提交登錄表單之前使用js代碼來設置cookie。點擊電子郵件輸入框的登錄表單可以觸發設置cookie的facebook js代碼,所以我創建了一個腳本在登錄之前點擊郵箱,但仍然收到「Cookies未在您的瀏覽器中啓用。請在您的瀏覽器偏好設置中啓用Cookie以繼續。「信息。這裏是我的代碼:phantomjs可以讀取通過javascript設置的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文件包含cookie已設置的cookie,但我沒有收到任何cookie。我也試過使用--cookies-file命令行,在我看來,phantomjs只能存儲由服務器端設置的cookie?或者我做錯了什麼?
這是不完全清楚它是什麼,你正在嘗試做的。在「自動登錄Facebook的過程」中,你暗示了什麼?使用--cookies-file命令參數可以存儲cookie(並因此保存並重用Facebook會話)。爲什麼你想手動重新創建cookie? – Vaviloff
你做錯了什麼,試圖「自動化」Facebook不想讓你自動化的東西。 – CBroe
「使用--cookies-file命令參數,您可以存儲cookie(從而保存並重用facebook會話)。」 - 我試過了,問題是它不起作用。我剛剛收到「您的瀏覽器未啓用Cookie,請啓用瀏覽器偏好設置中的cookies以繼續。」頁面加載後的消息。我上面發佈的腳本不是完整版本,我修改了它,以便你們可以看到phantomjs不存儲由javascript設置的cookie。我只是想知道讀取由js設置的cookie是否是phantomjs無法做到的或者錯誤是否在我的結尾。 – Jake