Я пытаюсь использовать 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();
});
Во-первых, перед щелчком я добавлю проверку, чтобы проверить, что кнопка загружена. После этого я бы привязал форму регистрации на уникальном селекторе. После быстрого поиска на странице, когда вы нажимаете кнопку входа, вход электронной почты имеет класс "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);