Войти в Facebook с phantomjs - 302 проблемы?
Я пытаюсь написать скрипт phantomjs, чтобы войти в мою учетную запись Facebook и сделать снимок экрана.
Вот мой код:
var page = require('webpage').create();
var system = require('system');
var stepIndex = 0;
var loadInProgress = false;
email = system.args[1];
password = system.args[2];
page.onLoadStarted = function() {
loadInProgress = true;
console.log("load started");
};
page.onLoadFinished = function() {
loadInProgress = false;
console.log("load finished");
};
var steps = [
function() {
page.open("http://www.facebook.com/login.php", function(status) {
page.evaluate(function(email, password) {
document.querySelector("input[name='email']").value = email;
document.querySelector("input[name='pass']").value = password;
document.querySelector("#login_form").submit();
console.log("Login submitted!");
}, email, password);
page.render('output.png');
});
},
function() {
console.log(document.documentElement.innerHTML);
},
function() {
phantom.exit();
}
]
setInterval(function() {
if (!loadInProgress && typeof steps[stepIndex] == "function") {
console.log("step " + (stepIndex + 1));
steps[stepIndex]();
stepIndex++;
}
if (typeof steps[stepIndex] != "function") {
console.log("test complete!");
phantom.exit();
}
}, 10000);
(Вдохновлен этим ответом, но учтите, что я увеличил интервал до 10 с)
Называется так:
./phantomjs test.js <email> <password>
С выводом (отфильтровывая предупреждения selfxss из Facebook):
step 1
load started
load finished
Login submitted!
load started
load finished
step 2
<head></head><body></body>
step 3
test
complete!
(Обратите внимание, что вывод html на втором шаге пуст)
Этот ответ предполагает, что существуют проблемы с опциями SSL phantomjs, но они работают с --ssl-protocol=any
не имеет никакого эффекта
Это похоже на аналогичную проблему, но для Каспара, а не фантомов (и на Windows, а не Mac) - я пытался использовать --ignore-ssl-errors=yes
, но это также не имело никакого эффекта.
Я догадался, что это может быть проблемой перенаправления (и, действительно, когда я повторял это в Chrome, ответ на нажатие кнопки "Отправить" был 302 Found
с местоположением https://www.facebook.com/checkpoint/?next
), но согласно этой документации я могу установить page.onNavigationRequested
обработчик - когда я делаю это в моем скрипте, он не вызывается.
Я думаю, что эта проблема связана, но похоже, что там нет решения.