javascript - 使用 CasperJS 从下拉框中获取选项值

标签 javascript casperjs

刚开始学习CasperJS,我知道我可以使用以下方法获取选项的文本:

var casper = require('casper').create();
casper.start('http://www.example.com/test.aspx', function() {
  this.evaluate(function () {
    this.echo("Values: " + this.fetchText('#mySelect'));
  });
});
casper.run(function () {
    this.exit();
});

哪里mySelect<select>在页面中。示例 HTML 如下:

<select id="mySelect">
  <option value="1">One</option>
  <option value="2">Two</option>
  <option value="3">Three</option>
</select>

我的目标是从 mySelect 中获取值(1、2 和 3) .我如何在 CasperJS 中执行此操作?我尝试了以下代码,但没有显示任何内容:

this.evaluate(function() {
    var options = document.getElementById("mySelect").children;
    for(var i = 0; i < options.length; i++) {
        this.echo('Options: ' + options[i]);
    }
});

经过一点调试,optionsundefined .

最佳答案

casper.evaluate与 PhantomJS 的 page.evaluate 基本相同(我链接了两者,所以你可以仔细阅读)。它是沙盒页面上下文。来自外部的变量在那里不可用,this 指的是 window。我怀疑该页面是否具有全局函数 echofetchText

请注意,不能从页面上下文传递 DOM 元素。您将必须构建如下表示:

var options = this.evaluate(function() {
    var options = document.getElementById("mySelect").children;
    return [].map.call(options, function(opt){
        return {val: opt.value, text: opt.textContent};
    });
});

或者只是

var options = this.getElementsInfo('#mySelect > option');

关于javascript - 使用 CasperJS 从下拉框中获取选项值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28229206/

相关文章:

javascript - CasperJS 绑定(bind)问题

node.js - 如何调用SpookyJS中的函数?

javascript - 如何格式化 casper.log 输出?

javascript - jQuery else 函数不工作

javascript - 如何创建水平图例?

JavaScript fetch 对表情符号的编码方式与 Python 请求不同

javascript - 通过 json 以 10ms 的间隔检查/显示变量值

JavaScript/下划线/lodash : Comparing object in array of objects and remove the matched object

javascript - 提交表单或点击提交输入无效

node.js - 如何从 MeteorJS 应用程序在 Meteor 服务器上运行远程外部命令?