Return只读内容<input type=text>

Return content of read-only <input type=text>

这是 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,但当 运行 时它们都未定义。如何获取输入框的内容?

DOM 上下文

CasperJS 沙盒 DOM 上下文(页面上下文)。只有在那里您可以直接访问 DOM 元素。页面上下文在 casper.evaluate() 回调中。 DOM 元素的其他所有内容都只是它的表示,因为 DOM 节点无法传递到外部上下文。

正在访问输入值

有很多方法可以从 DOM 中获取信息,但是 DOM 节点无法按原样打印到控制台。这里有两种获取输入值的方法。

  1. 可以使用casper.evaluate()。由于你想使用 XPath 表达式,你可以使用 __utils__.getElementByXPath() 由 CasperJS 注入页面的辅助函数:

    var value = casper.evaluate(function(xpathexpr){
        return __utils__.getElementByXPath(xpathexpr).value;
    }, '//*[@id="ifldf14"]/input');
    casper.echo("value: " + value);
    
  2. 如果输入字段在表单内部并且元素具有名称属性,则可以使用 casper.getFormValues() 并使用字段名称获取值。

    casper.echo(casper.getFormValues('form').nameHere);
    

XPath 辅助工具

var x = require('casper').selectXPath;

只是一个小帮手,可以将字符串转换为具有属性 typepath 的对象。它仅在 CasperJS 内部用于表示 XPath。区别是必要的,因为 CasperJS 支持 CSS 选择器和 XPath 表达式。它们最初都是简单的字符串,但执行方式不同。

问题是我没有使用 jQuery 来获取我的价值。感谢大家的参与!