簡體   English   中英

使用eval()結果填充CasperJS中的表單

[英]Using an eval() result to fill a form in CasperJS

我們如何將eval()的值傳遞給變量以填充密碼文本框。

這是我的CasperJS代碼。 這表明它找不到變量y

var fs = require('fs');
var casper = require ('casper').create();
var page = require('webpage').create();

casper.start('http://thedemosite.co.uk/login.php', function() {
    this.echo(this.getTitle());
    this.capture('loginbefore.bmp');

    casper.then ( function () {
        casper.evaluate(function(username, password) {
           document.querySelector('#username').value = username;
           document.querySelector('#password').value = password;
           document.querySelector('#FormsButton2').click();
        }, 'PP406214795IN', y));

        casper.then (function () {
            var fs = require('fs');
            var test = fs.read('readingjs.js');
            var y = eval(test);
        });
        this.wait(5000, function() {
            this.echo("I've waited for a  5 second.");
        });
    });
});
casper.run();

您的代碼有兩個問題。

  • 通過JavaScript中的var關鍵字定義的變量在本地函數范圍內。 它們只能在此函數中訪問,並且只能在此函數中定義閉包。 如果要使用全局變量,則需要在全局范圍或更高功能范圍中定義它。

  • 所有casper.then*()casper.wait*()都是異步步驟函數。 這意味着它們將按照您調用它們的順序一個接一個地執行。 由於在定義y之前使用y ,因此需要交換順序,但請記住,所有其他函數(例如casper.evaluate()都不異步,這意味着如果在casper.evaluate()之前調用casper.then() casper.evaluate()then()內部的代碼將在evaluate()代碼之后執行。

由於fs.read()eval()是同步函數,因此您可以像下面這樣簡單地向上移動文件讀取和eval

casper.start('http://thedemosite.co.uk/login.php', function() {
    this.echo(this.getTitle());
    this.capture('loginbefore.bmp');
});

casper.then(function(){
    var fs = require('fs');
    var test = fs.read('readingjs.js');
    var y = eval(test);

    this.evaluate(function(username, password) {
       document.querySelector('#username').value = username;
       document.querySelector('#password').value = password;
    }, 'PP406214795IN', y);
    this.click('#FormsButton2');
});

casper.then(function(){
    this.capture("loginAfter.png");
});

casper.run();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM