javascript - 如何使用 casperjs 登录 Instagram

标签 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.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加载的页面中找不到form元素。在Instagram表单登录中,它没有表单的name/id/class/action。当我使用以下代码片段时,它可以与 Twitter 登录一起使用

this.fillSelectors('form.signin', {
          'input[name="session[username_or_email]"]':    email,
          'input[name="session[password]"]':             auth
      }, true);

当我使用 this.fillSelectors 时,它会显示以下错误:

类型错误:“undefined”不是this上下文的函数(评估“this.fillSelectors”)

当我使用 this.fill 时,它显示以下错误:

CasperError:填写表单时遇到错误:找不到表单

如有任何建议,我们将不胜感激。

最佳答案

我遇到了完全相同的问题。最终我放弃了寻找 form 元素。我没有使用 this.fill('form', ...),而是使用标准 javascript 分别填充每个字段:

var username_field = document.getElementById('lfFieldInputUsername');
username_field.value = "XXXXXX";
var password_field = document.getElementById('lfFieldInputPassword');
password_field.value = "XXXXXX";

我没有提交表单,而是在 button 元素上发送了一个点击事件。

以下代码实际上适用于 PhantomJS,但您可以将其转换为 CasperJS API。

// 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 你会比我更幸运。

你可以看到我的完整代码here .

关于javascript - 如何使用 casperjs 登录 Instagram,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32330264/

相关文章:

javascript - 获取数组中列出的对象

azure - Blazor 使用 Azure AD 身份验证允许匿名访问

html - 如何正确编写 CSS 属性选择器来提取所有 id 属性?

java - 使用 jsoup 抓取多个页面

javascript - 从 mysql 表中获取值并显示在下拉菜单中选择的值

javascript - 我怎样才能让这个数组方程发挥作用?

javascript - 在 jQuery 中查找并删除日期

.net - 在 Windows 应用程序中保存用户凭据

php - 处理来自多个第三方 API 的登录

python - 如何使用 scrapy 和 python 动态抓取 Tripadvisor