使用CasperJS按ID填充表单时casper.thenEvaluate传参填充undefined如何解决
问题原因
casper.thenEvaluate()中传入的函数是运行在独立的浏览器页面上下文内,CasperJS 运行环境的变量无法直接被该函数读取,所有需要用到的外部参数必须通过thenEvaluate方法的后续入参显式传递。- 你当前的代码仅在函数定义中声明了要接收
text参数,没有在函数后传入对应的实际值,因此函数内部获取到的text为undefined。
解决方法
在执行函数之后按顺序追加要传入的实际参数即可,比如要给输入框填充"测试填充内容",正确写法如下:
casper.thenEvaluate(function(text){ document.querySelector("#inputValue").value = text }, "测试填充内容")
如果需要传递多个参数,按参数顺序向后追加即可,多参数示例:
casper.thenEvaluate(function(username, password){ document.querySelector("#username").value = username document.querySelector("#password").value = password }, "admin", "123456")
注意:
thenEvaluate仅支持传递可序列化的基础数据类型(字符串、数字、布尔值、普通JSON对象/数组等),不可传递函数、DOM节点、Casper/Phantom实例对象这类无法序列化的内容。
内容的提问来源于stack exchange,提问作者sahil Malik
相关产品推荐
相关产品推荐

