5
我已经编写了这个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);
}
);
而且这里是我试过到目前为止:
- 中设置Cookie。除了添加
--cookies-file=cookies.txt
命令行选项之外,我还在代码中尝试了phantom.addCookie
。似乎没有任何区别。 - 显式发送auth头文件。请参阅this question。
- 更改时区。不知道这是否有道理。见this question。
显然PhantomJS有一些SSL问题。我应该为此放弃使用它吗?
谢谢!现在完美运作。我已经对脚本进行了必要的调整并将其发布到Github上 - [link here](https://github.com/eafreitas/autoig) – Euripedes
@Euripedes很高兴为您提供帮助。我很难弄清楚每一个输入变化都应该放在单独的page.evaluate中。 –