如何在 CasperJS 中获得 JSON?

How to get a JSON in CasperJS?

我有一些参数 name1、name2、name3。如何获得包含这些参数的 JSON 文件?我尝试这样做,但我什么也没得到:

var jsonStr = this.evaluate(function(){
       var outjson = {};
       var outjson = {'name1': name1, 'name2': name2, 'name3': name3};
       return JSON.stringify(outjson);
       });
    fs.write('myFile.json', jsonStr, 'w');

函数没有闭包,你求值。您可以在这里阅读相关内容:http://phantomjs.org/api/webpage/method/evaluate.html

这就是当您评估函数时未定义变量 name1、name2 和 name3 的原因。

Phantom 2 在当前版本中存在以下错误 - evaluate 函数中的错误无一例外。在这种情况下,evaluate 只是 returns null.

所以,你的函数在评估时出错,但什么也没得到。

您可以试试下面的例子,它打印

jsonStr: {"name1":1,"name2":2,"name3":3}

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

casper.start('http://casperjs.org/', function() {});

casper.then(function() {
    var jsonStr = this.evaluate(function() {
        var outJson = {'name1': 1, 'name2': 2, 'name3': 3};
        return JSON.stringify(outJson);
    });

    this.echo('jsonStr: ' + jsonStr);

    fs.write('myFile.json', jsonStr, 'w');

});

casper.run();

和下面的示例,它打印

jsonStr: null

var casper = require('casper').create();

casper.start('http://casperjs.org/', function() {});

casper.then(function() {
    var jsonStr = this.evaluate(function() {
        var outJson = {'name1': name1, 'name2': name2, 'name3': name3};
        return JSON.stringify(outJson);
    });

    this.echo('jsonStr: ' + jsonStr);
});

casper.run();