我是CasperJS的新手并试图从网站上获取一些JS代码。我们说我得到了这段代码:
<html>
...
<script type="text/javascript">
var a = "true";
function abc(){
var b = "someValue";
b = b + " and other value";
}
</script>
...
...
</html>
我能够得到一个&#39;价值使用:
casper.getGlobal("a");
但无法找到获得&#39; b&#39;价值(如果可能的话)。我想着下载整个页面然后离线解析它,但也许有人知道更好的方式来利用CasperJS。
答案 0 :(得分:1)
JavaScript具有功能级别范围。这意味着使用var
或let
关键字在函数内定义的变量是本地的。您无法从外部范围访问它们。如果可以的话,这将是非常奇怪的,因为这意味着该函数处于某种暂停执行状态。无法直接访问b
。
你是正确的,建议你需要以某种方式解析函数来检索该值。似乎包含有趣值的函数是全局定义的,因此您可以访问该函数对象。
例如,您可以删除使abc
函数成为函数的所有内容,并eval
。这样您就可以直接访问b
。
半伪代码:
var b = casper.evaluate(function(){
var abcFnString = abc.toString()
.replace("function abc(){", "") // remove header
.replace(/return/g, "") // remove returns
.slice(0, -1); // removed footer
return (function(){
eval(abcFnString);
return b;
})();
});