Javascript 使用CasperJS访问页面上的内部范围变量值
我是CasperJS的新手,正在尝试从网站上获取一些JS代码。假设我得到了这个代码:Javascript 使用CasperJS访问页面上的内部范围变量值,javascript,variables,casperjs,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> 但
<html>
...
<script type="text/javascript">
var a = "true";
function abc(){
var b = "someValue";
b = b + " and other value";
}
</script>
...
...
</html>
但无法找到获得“b”值的方法(如果可能的话)。我正在考虑下载整个页面,然后离线解析它,但也许有人知道更好的利用CasperJS的方法。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;
})();
});
无法直接访问
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;
})();
});