Casperjs需要本地JSON文件

时间:2017-09-01 21:01:34

标签: json phantomjs casperjs require evaluate

我正在尝试要求本地JSON文件(例如配置文件)并传递这些JSON对象以进行评估。对于每个配置文件,evaluate函数将返回不同的结果,具体取决于config JSON中给定的CSS选择器。

例如: 文件夹结构如下:

rootdir
  casperExample.js
  config/
    |_example.json

example.json

{
    "title": "$('div.pointslocal-details-section h1').text();",
    "date": "$('div.pointslocal-details-time p').text();"
}

casperExample.js

var casper = require('casper').create();
var require = patchRequire(require);
var json = require('./config/example.json');

casper.start('https://website/to/be/scraped');

casper.then(function(){
    this.echo(json);
    pageData = this.evaluate(function(json){
        var results = {};
        results['title'] = json.title;
        results['date'] = json.date;
        return results;
    }, json);
    this.echo(pageData);
});

casper.run(function(){
    this.exit();
});

这是我尝试运行时得到的:casperjs casperExample.js

CasperError: Can't find module ./config/example.json
  C:/Users/msarc/coding/casper/rootdir/phantomjs:/code/bootstrap.js:307 in patchedRequire

如果我使用var json = require('./config/example');(没有.json),我会得到

SyntaxError: Expected token '}'
C:/Users/msarc/coding/casper/rootdir/phantomjs:/platform/example.js:32 in loadModule
C:/Users/msarc/coding/casper/rootdir/phantomjs:/platform/bootstrap.js:282 in _compile
C:/Users/msarc/coding/casper/rootdir/phantomjs:/platform/bootstrap.js:126 in .js
C:/Users/msarc/coding/casper/rootdir/phantomjs:/platform/bootstrap.js:278 in _load
C:/Users/msarc/coding/casper/rootdir/phantomjs:/platform/bootstrap.js:311 in require
C:/Users/msarc/coding/casper/rootdir/phantomjs:/platform/bootstrap.js:263 in require
C:/Users/msarc/coding/casper/rootdir/phantomjs:/code/bootstrap.js:302 in patchedRequire

我想最终制作多个配置文件,每个配置文件都有不同的网站选择器。 casperjs版本:1.1.4 phantomjs版本:2.1.1

1 个答案:

答案 0 :(得分:0)

你是require json文件,好像它是一个javascript模块,当然不是,因此错误。相反,您需要读取文件并处理它是JSON结构:

var fs = require('fs');
var fileContents = fs.read('config/_example.json');
var json = JSON.parse(fileContents);

然后按计划继续工作。