Я написал этот скрипт PhantomJS для автоматизации входа в Instagram. Он может успешно заполнить поля формы и нажать кнопку отправки, но он всегда перенаправляется обратно на экран входа в систему со следующим сообщением:Устранение неполадок кода PhantomJS для входа в Instagram
Неправильное имя пользователя или пароль.
Я на 100% уверен, что учетные данные верны, и я попробовал их с несколькими учетными записями Instagram.
Я бегу сценарий на Mac из терминала:
$ phantomjs --ssl-protocol=any --cookies-file=cookies.txt script.js username password
Обратите внимание на --ssl-protocol=any
вариант. Без него PhantomJS не может даже открыть страницу входа из-за HTTPS. См. this question.
Вот код. Я основал его this tutorial и обновил код для учета последних изменений в исходном коде страницы входа в Instagram.
var system = require('system');
var username = system.args[1];
var password = system.args[2];
var page = require('webpage').create();
page.open('https://instagram.com/accounts/login/',
function (status) {
if (status === "success") {
page.evaluate(function (uid, pwd) {
var username_field = document.getElementById('lfFieldInputUsername');
username_field.value = uid;
var password_field = document.getElementById('lfFieldInputPassword');
password_field.value = pwd;
}, username, password);
var point = page.evaluate(function() {
var element = document.getElementsByTagName('button')[0];
var rect = element.getBoundingClientRect();
return {
x: rect.left + Math.floor(rect.width/2),
y: rect.top + Math.floor(rect.height/2)
};
});
page.render('before-submit.png');
page.sendEvent('click', point.x, point.y);
}
setTimeout(function() {
var error = page.evaluate(function() {
var element = document.getElementById('errorAlert');
var error_message = false;
if (element !== null) {
error_message = element.innerText.trim();
}
return error_message;
});
page.render('after-submit.png');
if (!error) {
console.log('Login Successful: ' + page.url);
} else {
console.log('Login Failed: ' + error);
}
phantom.exit(0);
}, 5000);
}
);
И вот что я пытался до сих пор:
- Установка печенья. Помимо добавления опции командной строки
--cookies-file=cookies.txt
, я также попробовалphantom.addCookie
в коде. Кажется, не имеет никакого значения. - Явно отправляю заголовки заголовков. См. this question.
- Изменение часового пояса. Не уверен, что это имеет смысл. См. this question.
По-видимому, у PhantomJS есть некоторые проблемы с SSL. Должен ли я просто отказаться от использования этого для этой цели?
Спасибо! Прекрасно работает. Я внесла необходимые корректировки в скрипт и опубликовал его на Github - [ссылка здесь] (https://github.com/eafreitas/autoig) – Euripedes
@Euripedes Очень рад помочь вам. Мне было трудно понять, что каждое изменение ввода должно быть размещено на отдельной странице. Оцените. –