我正在使用 CasperJS 来抓取网站。我发现了一件有趣的事情,但我不确定它为什么会发生。
因此,使用 CasperJS(和 PhantomJS),您可以使用他们的Evaluate PhantomJS Evaluate CasperJS方法进入页面上下文。
我在页面上下文中创建了一个对象,为了将它返回给 CasperJS,我将它转换为字符串。这是我所做的:
casper.then(function() {
var test = this.evaluate(function() {
var test_obj = { test_obj: ['test'] }
console.log("TEST OBJECT VALUE:");
var JSON_obj = JSON.stringify(test_obj);
console.log(JSON_obj);
return JSON_obj;
});
});
因此,在两个不同的页面中,结果是不同的:
在此页面上下文中,JSON_obj 值为:
{"test_obj":"[\"test\"]"}
在此其他页面上下文中,JSON_obj 值为:
{"test_obj":["test"]}
这很糟糕,因为我在 Ruby 中捕获了结果,并且在执行时JSON.parse
,对于第一种情况,它将数组视为字符串......知道为什么JSON.stringify
在不同的页面上下文中会表现得“不同”吗?对我来说很有趣!