Javascript 如何使用casperjs登录Instagram

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

我是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.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
在尝试填写表单之前,先等待表单)