Использование Casper для входа на страницу с сгенерированным Javascript контентом

0

Я пытаюсь использовать casper для входа в http://insider.espn.go.com/insider/pickcenter/. Теперь проблема заключается в том, что при нажатии кнопки входа в систему появляются генерируемые пользователем AngularJS - имя пользователя и пароль. Я поставил WaitForSelector на ожидание этого всплывающего окна. Но он всегда выходит, говоря, что "Истекло время ожидания"

Вот мой сценарий. Пожалуйста помоги.

    var links = [];
var casper = require("casper").create();

function getLinks() {
    var links = document.querySelectorAll('a');
    return Array.prototype.map.call(links, function(e) {
        return e.getAttribute('href');
    });
}
casper.on('page.loaded', function() {
    this.echo('page title is ' + this.getTitle());
});
casper.start('http://insider.espn.go.com/insider/pickcenter/', function() {
    // search for 'casperjs' from google form
    this.emit('page.loaded');
    casper.capture('test1.png');
    this.click('#ins_signin');

});
casper.wait(5000,function(){
    casper.capture('test2.png')
});
casper.wait(5000,function(){
    casper.capture('test3.png')
});
casper.waitForSelector(".ng-scope", function() {
    this.echo('Login Modal Active!');
    casper.capture('test4.png');
    //this.capture('screenshotofmodal.png', { top: 0, left:0, width:1000, height:  4000}); 

 });

casper.then(function() {
this.fill('input[id="username"]', { q: 'removed' }, true);
    this.fill('input[id="passwordfield"]', { q: 'removed' }, true);

});
casper.then(function() {

    this.click('#submitBtn');
});
casper.then(function() {
    // aggregate results for the 'phantomjs' search
    links = links.concat(this.evaluate(getLinks));
});

casper.run(function() {
    // echo results in some pretty fashion
    this.echo(links.length + ' links found:');
    this.echo(' - ' + links.join('\n - ')).exit();
});
Теги:
phantomjs
casperjs

1 ответ

0

Во-первых, перед щелчком я добавлю проверку, чтобы проверить, что кнопка загружена. После этого я бы привязал форму регистрации на уникальном селекторе. После быстрого поиска на странице, когда вы нажимаете кнопку входа, вход электронной почты имеет класс "ng-touchhed", который появляется только после нажатия на регистрацию. Я бы попытался выглядеть так:

casper.start('http://insider.espn.go.com/insider/pickcenter/', function() {
    // search for 'casperjs' from google form
    this.emit('page.loaded');
    casper.capture('test1.png');
});
casper.waitForSelector("#ins_signin",function then(){
    this.click("#ins_signin");
}, function onTimeOut(){
    this.capture('waitSignInFail.png');
}, 5000);

casper.waitForSelector(".ng-touched", function then() {
    this.echo('Login Modal Active!');
    casper.capture('weHaveSignInForm.png');
}, function onTimeOut(){
    this.capture('signInFormFail.png');
}, 5000);
  • 0
    Я не могу комментировать ваш пост, поэтому я должен был ответить сразу, хотя у меня были к вам вопросы, поэтому я буду задавать их здесь, и, надеюсь, вы его увидите. Что для вас делает test2.png с вашим исходным кодом?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню