这是HTML:
<div id="ifld1014" class="ax-terminal-field x20" title="" style="top: 272px;
left: 154px;"><input type="text" maxlength="30" size="30"
class="ax-terminal-inputField ax_x20i" readonly="readonly" style="width: 240px;"></div>
以下是我的一些casper代码:
var x = require('casper').selectXPath;
....//truncated for shortness//....
casper.echo(x('//*[@id="ifldf14"]/input').value);
未定义的结果。我尝试了.value,.text,.innerHTML,但是在运行时它们都是未定义的。如何获取输入字段的内容?
答案 0 :(得分:1)
CasperJS沙盒DOM上下文(页面上下文)。只有在那里你才能直接访问DOM元素。页面上下文位于casper.evaluate()
回调内。关于DOM元素的其他所有内容都只是它的表示,因为DOM节点不能传递给外部上下文。
有很多方法可以从DOM中获取信息,但DOM节点无法按原样打印到控制台。以下是获取输入值的两种方法。
您可以使用casper.evaluate()
。由于您要使用XPath表达式,因此可以使用CasperJS注入的__utils__.getElementByXPath()
辅助函数到页面中:
var value = casper.evaluate(function(xpathexpr){
return __utils__.getElementByXPath(xpathexpr).value;
}, '//*[@id="ifldf14"]/input');
casper.echo("value: " + value);
如果输入字段位于表单内,并且元素具有name属性,则可以使用casper.getFormValues()
并使用字段名称获取值。
casper.echo(casper.getFormValues('form').nameHere);
var x = require('casper').selectXPath;
只是一个小帮手,可以将字符串转换为具有属性type
和path
的对象。它仅在内部用于CasperJS以表示XPath。区别是必要的,因为CasperJS支持CSS选择器和XPath表达式。它们最初都是简单的字符串,但执行方式不同。
答案 1 :(得分:0)
问题是我没有使用jQuery来获取我的价值。感谢大家的投入!