Javascript 如何使用casperjs登录Instagram
我是CasperJs的初学者,我编写了以下代码:Javascript 如何使用casperjs登录Instagram,javascript,authentication,web-scraping,phantomjs,casperjs,Javascript,Authentication,Web Scraping,Phantomjs,Casperjs,我是CasperJs的初学者,我编写了以下代码: 'use strict'; var casper = require('casper').create(); var username = "XXXXXXXX"; var password = "XXXXXXXX"; casper.start('https://instagram.com/accounts/login/', function() { this.echo(this.getTitle()); console.l
'use strict';
var casper = require('casper').create();
var username = "XXXXXXXX";
var password = "XXXXXXXX";
casper.start('https://instagram.com/accounts/login/', function() {
this.echo(this.getTitle());
console.log('Starting location is ' + this.getCurrentUrl());
});
casper.then(function() {
/*this.fill('form[data-reactid=".0.0.1.0.1"]', {
username: username,
password: password
}, true); i tried this*/
/*this.fill('form[data-reactid=".0.0.1.0.1"]', {
'input[id="lfFieldInputUsername"]': username,
'input[id="lfFieldInputPassword"]': password
}, true); i tried this too*/
//i am trying this too because the page have only one form element
this.fill('form', {
username: username,
password: password
}, true);
});
casper.then(function() {
console.log('Authentication ok, new location is ' + this.getCurrentUrl());
});
casper.run(function() {
this.echo('end');
});
我发现它无法在CasperJs加载的页面中找到表单元素。在Instagram表单登录中,它没有表单的名称/id/class/action。当我使用以下代码段时,它与twitter登录一起工作
this.fillSelectors('form.signin', {
'input[name="session[username_or_email]"]': email,
'input[name="session[password]"]': auth
}, true);
当我使用this.fillSelectors时,它会显示以下错误:
TypeError:“undefined”不是用于此上下文的函数(计算“this.fillSelectors”)
当我使用this.fill时,它会显示以下错误:
CasperError:填写表单时遇到错误:找不到表单
任何建议都将不胜感激。我也有同样的问题。最后,我放弃了寻找
表单
元素。我没有使用this.fill('form',…)
,而是使用标准javascript分别填充每个字段:
var username_field = document.getElementById('lfFieldInputUsername');
username_field.value = "XXXXXX";
var password_field = document.getElementById('lfFieldInputPassword');
password_field.value = "XXXXXX";
我没有提交表单,而是在按钮
元素上发送了一个click事件
下面的代码实际上是针对PhantomJS的,但您可能可以将其转换为CasperJSAPI
// Create a page object
var page = require('webpage').create();
// Open the page
page.open('https://instagram.com/accounts/login/', ...
// do other stuff like filling the form fields
// Send the click event
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.sendEvent('click', point.x, point.y);
坏消息是,在这之后,我得到了一个“密码不正确”的错误,即使我确信密码是正确的。我还没能解决这个问题
也许你使用CasperJS会比我运气好
您可以看到我的完整代码。这是我的代码:
casper.then(function ()
{
this.sendKeys('input[name="username"]', userName);
this.sendKeys('input[name="password"]', pass);
this.clickLabel('Log in','button');
});
您使用哪个PhantomJS和CasperJS版本?CasperJS版本是1.0.4(1)您使用哪个PhantomJS版本?(2) 请注册到
resource.error
,page.error
,remote.message
和casper.page.onResourceTimeout
事件()。可能有错误。Phantomjs版本是2.0.0,我应用了上面评论中提供的所有事件,其中Phantomjs发出警告([警告][幻影]加载资源失败,状态=失败:),并显示相同的错误(CasperError:填写表单时遇到的错误:找不到表单)@GauravDave可能不是重复的,如(假设使用最新的casperjs无法解决此问题)它可能是Instagram登录的特定内容(例如,可能waitFor
在尝试填写表单之前,先等待表单)