Ho scritto questo script PhantomJS per automatizzare l'accesso a Instagram. Può riempire correttamente i campi del modulo e premere il pulsante di invio, ma viene sempre reindirizzato alla schermata di accesso con il seguente messaggio:Risolvi il codice PhantomJS per accedere a Instagram
Il nome utente o la password non erano corretti.
Sono 100% positivo che le credenziali siano corrette e l'ho provato con più account Instagram.
che sto eseguendo lo script su un Mac da terminale:
$ phantomjs --ssl-protocol=any --cookies-file=cookies.txt script.js username password
Nota l'opzione --ssl-protocol=any
. Senza di esso PhantomJS non può nemmeno aprire la pagina di accesso a causa di HTTPS. Vedi this question.
Ecco il codice. L'ho basato su this tutorial e ho aggiornato il codice per tenere conto delle recenti modifiche nel codice sorgente della pagina di accesso di 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);
}
);
E qui è quello che ho provato finora:
- Impostazione cookie. Oltre all'aggiunta dell'opzione da riga di comando
--cookies-file=cookies.txt
, ho anche provatophantom.addCookie
nel codice. Non sembra fare alcuna differenza. - Invio di intestazioni auth in modo esplicito. Vedi this question.
- Modifica del fuso orario. Non sono sicuro se questo ha un senso. Vedi this question.
A quanto pare PhantomJS presenta alcuni problemi con SSL. Dovrei semplicemente smettere di usarlo per questo scopo?
Grazie! Funziona perfettamente ora. Ho apportato le modifiche necessarie alla sceneggiatura e l'ho pubblicata su Github - [collegamento qui] (https://github.com/eafreitas/autoig) – Euripedes
@Euripedes Molto felice di aiutarti. È stato difficile per me capire che ogni modifica di input dovrebbe essere collocata in una pagina separata. Valutare. –