2015-11-05 108 views
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?或者我做錯了什麼?

+0

這是不完全清楚它是什麼,你正在嘗試做的。在「自動登錄Facebook的過程」中,你暗示了什麼?使用--cookies-file命令參數可以存儲cookie(並因此保存並重用Facebook會話)。爲什麼你想手動重新創建cookie? – Vaviloff

+0

你做錯了什麼,試圖「自動化」Facebook不想讓你自動化的東西。 – CBroe

+0

「使用--cookies-file命令參數,您可以存儲cookie(從而保存並重用facebook會話)。」 - 我試過了,問題是它不起作用。我剛剛收到「您的瀏覽器未啓用Cookie,請啓用瀏覽器偏好設置中的cookies以繼續。」頁面加載後的消息。我上面發佈的腳本不是完整版本,我修改了它,以便你們可以看到phantomjs不存儲由javascript設置的cookie。我只是想知道讀取由js設置的cookie是否是phantomjs無法做到的或者錯誤是否在我的結尾。 – Jake

回答

0

只要改變你的用戶代理

page.settings.userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:44.0) Gecko/20100101 Firefox/44.0"