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

Accessing inner scope variable values on the page with CasperJS

我是 CasperJS 的新手,正在尝试从网站获取一些 JS 代码。假设我得到了这段代码:

<html>
...
<script type="text/javascript">
    var a = "true";

    function abc(){
        var b = "someValue";
        b = b + " and other value";
    }
</script>
...
...
</html>

我可以使用以下方式获得 'a' 值:

casper.getGlobal("a");

但找不到获取 'b' 值的方法(如果可能的话)。我正在考虑下载整个页面然后离线解析它,但也许有人知道利用 CasperJS 的更好方法。

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;
    })();
});