10 votes

Casperjs passage de paramètres pour évaluer échoue

casper.then(function(){
 phone_number   = '7wqeqwe6';
 phone_password = 'Teqweqweqw34';

});

casper.thenEvaluate(function(phone,password) {

document.querySelector('input#myTMobile-phone').setAttribute('value',phone);
document.querySelector('input#myTMobile-password').setAttribute('value',password);

//  document.querySelector('form').submit();
}, { 

phone    : phone_number,
password : phone_password

});

ceci me jette

string(307) "[37;41;1mÉCHEC[0m ReferenceError: Impossible de trouver la variable : phone_number

Y a-t-il un moyen de passer des paramètres à la méthode evaluate?

22voto

NiKo Points 5023

Essayez quelque chose comme ceci :

var phone_number = '7wqeqwe6',
    phone_password = 'Teqweqweqw34';

casper.start('http://…');

casper.thenEvaluate(function(phone, password) {
    document.querySelector('input#myTMobile-phone').setAttribute('value', phone);
    document.querySelector('input#myTMobile-password').setAttribute('value', password);
    //  document.querySelector('form').submit();
}, {
    phone: phone_number,
    password: phone_password
});

Remarques :

  1. un lien cool sur la portée en javascript
  2. remplir des formulaires ? il y a une API pour cela

10voto

user2282405 Points 111

Les autres réponses sont pré 1.0. La méthode préférée est de passer les arguments en ligne

Exemple

casper.evaluate(function(username, password) {
    document.querySelector('#username').value = username;
    document.querySelector('#password').value = password;
    document.querySelector('#submit').click();
}, 'sheldon.cooper', 'b4z1ng4');

http://docs.casperjs.org/en/latest/modules/casper.html#evaluate

1voto

mike Points 870

Je ne sais pas ce qui ne va pas avec votre code. Jetez un coup d'œil à CasperJS API:

Évalue une expression dans le contexte de la page distante, un peu comme ce que fait WebPage#evaluate de PhantomJS, mais peut également gérer les arguments passés si vous définissez leur contexte:

Exemple:

casper.evaluate(function(username, password) {
    document.querySelector('#username').value = username;
    document.querySelector('#password').value = password;
    document.querySelector('#submit').click();
}, {
    username: 'sheldon.cooper',
    password: 'b4z1ng4'
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X