使用 CasperJS 使用 <option> 标签内的文本填充表单的 select 框

Filling a select box of a form using the text inside the <option> tags with 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>

因此,如果我想 select 贝塞尔曲线,我必须写成 'departure':'Montpellier'。 有没有办法使用选项标签内的文本?

最简单的方法是检索您想要 select 的选项的元素值并稍后使用该值。可能是在随后的 selection 期间另一个选项被 selected,但值将是相同的,所以应该 not 有所作为:

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())
  });
});

您可以轻松地 select DOM 使用 XPath 的节点,方法是使用 text() 函数测试它们的文本内容。对 arrival.

做同样的事情