使用 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 具有函数级作用域。这意味着使用 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;
})();
});
我是 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 具有函数级作用域。这意味着使用 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;
})();
});