2015-05-04 69 views
1

我是CasperJS的新手,尝试从网站获取一些JS代码。比方说,我得到这个代码:使用CasperJS访问页面上的内部范围变量值

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

+1

有访问'B'没有直接的方法。 –

回答

0

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