使用CasperJS访问页面上的内部范围变量值

时间:2015-05-04 08:43:50

标签: javascript variables casperjs

我是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。

1 个答案:

答案 0 :(得分:1)

JavaScript具有功能级别范围。这意味着使用varlet关键字在函数内定义的变量是本地的。您无法从外部范围访问它们。如果可以的话,这将是非常奇怪的,因为这意味着该函数处于某种暂停执行状态。无法直接访问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;
    })();
});