使用 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
.
做同样的事情
我想填写本网站的 "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
.