2

Я новичок в CasperJs, я написал следующий код:Как войти в Instagram, используя 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 формы. в то время как он работает с щебет входа в систему, когда я использовал следующий фрагмент кода

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

И когда я использую this.fillSelectors, то он показывает следующее сообщение об ошибке:

TypeError: «неопределенные» не является функцией (оценка 'this.fillSelectors') для этот контекст.

Когда я использую this.fill затем он показывает следующее сообщение об ошибке:

CasperError: Ошибки при заполнении формы: форма не найдена

Любые предложения будут оценены.

+0

Какого PhantomJS и CasperJS версии вы используете? –

+0

Версия CasperJs 1.0.4 – skmahawar

+0

(1) Какую версию PhantomJS вы используете? (2) Пожалуйста, зарегистрируйтесь на события 'resource.error',' page.error', 'remote.message' и' casper.page.onResourceTimeout' ([Пример] (https://gist.github.com/artjomb/ 4cf43d16ce50d8674fdf)). Возможно, есть ошибки. –

ответ

0

У меня была такая же проблема. В итоге я отказался от поиска элемента 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, но вы можете преобразовать его в API CasperJS.

// 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.

0

вот мой код:

casper.then(function() 
{ 
     this.sendKeys('input[name="username"]', userName); 
     this.sendKeys('input[name="password"]', pass); 
     this.clickLabel('Log in','button'); 
}); 
Смежные вопросы