使用CasperJS </option>中<option>标签内的文本填写表单的选择框

时间:2015-04-21 17:38:09

标签: javascript html-select casperjs

我想填写本网站的“Acheter un billet”表格:http://www.leguichet.fr/

这是我到目前为止所做的:

var casper = require('casper').create();

casper.start('http://www.leguichet.fr/', function() {
  this.fill('form#search_tickets', {'departure':'1', 'arrival':'2'}, false);
  this.click('input[value="Rechercher"]');
  this.wait(1000, function() {
    this.echo(this.getCurrentUrl());
  });
});

casper.run(function(){
    this.exit();
});

文档说fill()使用value属性来匹配,但我想使用选项标签内的文本。例如,他们有:

<option value="Montpellier">Montpellier</option>
<option value="Montpellier">Béziers</option>

因此,如果我想选择Béziers,我必须写'出发':'蒙彼利埃'。 有没有办法在选项标签内使用文本?

1 个答案:

答案 0 :(得分:0)

最简单的方法是检索要选择的选项的元素值,然后再使用该值。情况可能是在后续选择期间选择了另一个选项,但该值将是相同的,因此会产生影响:

var x = require('casper').selectXPath;
casper.start('http://www.leguichet.fr/', function() {

  var textToSelect = "Béziers";
  var value = this.getElementAttribute(x("//form[@id='search_tickets']//select[@name='departure']/option[contains(text(), '" + text + "')]"), 'value');

  this.fill('form#search_tickets', {'departure': value, 'arrival':'2'}, false);

  this.click('input[value="Rechercher"]');
  this.wait(1000, function() {
    this.echo(this.getCurrentUrl())
  });
});

您可以使用text()函数测试文本内容,轻松选择带有XPath的DOM节点。对arrival执行相同的操作。