Передача переменной CasperJS для оценки не может заставить ее работать

хорошо, вот моя функция casperjs:

if(casper.exists(ac2)){

    var accountnumber = this.fetchText('div.arabic:nth-child(2) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(2) > td:nth-child(2) > a:nth-child(1)');
    var redir = accountnumber.substr(1);

casper.then(function() {

var uel = "https://example.ws/send.html?f=" + redir;
this.thenOpen(uel, function() {
casper.wait(10000, function() {    
    casper.then(function() {
    var accountnumber1 = this.fetchText('div.arabic:nth-child(1) > font:nth-child(1)');
    var acccc = accountnumber1.split(' ');
    system.stdout.writeLine(acccc[3]); // this output a number 
    var amount = acccc[3];
var result = amount * 0.019;
var result2 = result.toFixed(6);
var fresult = amount - result2;
var needed = fresult.toFixed(3);
    system.stdout.writeLine(needed); // this output a number 
    this.evaluate(function() {

    document.getElementById('account').value = '6028';
    document.getElementsByName('data')[0].value = needed; // this just does not work even though i know there a number needed in var needed 

    }); 
    //this.click("input#sbt.button[type='submit']");

casper.wait(10000, function() {
    casper.then(function() {
    this.capture("capture1.jpg");
    var el2 = this.getHTML();
    fs.write('result.html', el2, 'w');
    });
   });
  });});
 });
});

} else { 

this.exit(); 

}

По какой-то причине я просто не могу заставить переменную правильно отправлять эту функцию:

    this.evaluate(function() {

    document.getElementById('account').value = '6028';
    document.getElementsByName('data')[0].value = needed; // this just does not work even though i know there a number needed in var needed 

    }); 

Может ли кто-нибудь помочь мне исправить это, чтобы число действительно правильно передавалось для оценки функции.


person user3407899    schedule 23.03.2014    source источник
comment
Трудно понять, что вы хотите здесь сделать. Что такое ас2?   -  person Brice Favre    schedule 24.03.2014


Ответы (1)


Передайте переменную needed в качестве аргумента функции evaluate(), полученной из evaluate() PhantomJS.

Вы смешиваете 2 разных контекста. В среде DOM страницы (внутри evaluate()) needed неизвестен, потому что evaluate() находится в песочнице.

Я установил var neededCasperContext = needed;, чтобы показать вам разницу, но, конечно, вы можете передать ее напрямую.

var neededCasperContext = needed;

this.evaluate(function(neededPageDomContext) {

    document.getElementById('account').value = '6028';
    document.getElementsByName('data')[0].value = neededPageDomContext;
}, neededCasperContext);
person Fanch    schedule 24.03.2014
comment
обратный вызов, '}, needCasperContext);' похоже на шпильку - person Elliot Robert; 21.08.2016