Eur*_*des 5 javascript authentication https login phantomjs
我已经编写了这个PhantomJS脚本来自动登录Instagram.它可以成功填写表单字段并按下提交按钮,但它总是被重定向回登录屏幕,并显示以下消息:
你的用户名或密码不正确.
我100%肯定凭据是正确的,我尝试使用多个Instagram帐户.
我在终端的Mac上运行脚本:
$ phantomjs --ssl-protocol=any --cookies-file=cookies.txt script.js username password
Run Code Online (Sandbox Code Playgroud)
请注意该--ssl-protocol=any选项.没有它,PhantomJS甚至无法打开登录页面,因为HTTPS.看到这个问题.
这是代码.我将它基于本教程,并更新代码以解释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);
}
);
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止所尝试的内容:
--cookies-file=cookies.txt命令行选项,我还尝试phantom.addCookie了代码.似乎没有任何区别.显然PhantomJS存在一些SSL问题.我应该放弃使用它吗?
小智 0
我认为 Instagram 登录的问题是 ReactJs。当您设置文本字段的值时,React 不会更改状态。这意味着当您提交表单时,登录名和密码发送为空。
我没有尝试,但我认为你应该用按键事件填充文本输入,因为内部组件(React)状态仅在输入文本更改时才会更改。以您的方式设置值不会触发change事件。
| 归档时间: |
|
| 查看次数: |
1545 次 |
| 最近记录: |