如何:使用 CasperJS 打印 Select 选项值?
How to: Print Select Option Values Using CasperJS?
我正在尝试打印 "complist" 中每个选项的值,看起来像这样:
<select name="complist">
<option selected="" value="111 1">107-83-5 C6H14 2-Methylpentane</option>
<option value="1 24"> 75-07-0 C2H4O Acetaldehyde</option>
<option value="6 2">106-93-4 C2H4Br2 Ethylene bromide</option>
</select>
我试过了:
casper.then(function(){
this.evaluate(function(){
//var options = document.querySelectorAll('select[name="complist"]');
var options = document.querySelector('select[name="complist"]');
})
for (var i=0; i< options.length; i++){
console.log(">>> " + options[i].textContent);
}
});
但我收到以下错误:
- 错误> ReferenceError:找不到变量:选项,错误
- 文件> phantomjs://code/gruppen3.js,警告
- 行 > 113,警告
- 功能>,警告
由 for 循环中的 options.length 产生:/
我尝试了一些其他方法(例如 )来 return 选项列表,但到目前为止没有任何效果。
要准确了解我在说什么,您可以:
- 导航到 http://www.ddbst.com/unifacga.html
- Select 选项编号。 4(DDB 搜索)
- 输入例如174作为ddb编号并提交。
- 您现在应该会看到 "complist" 只有一个水选项。
如何 return 期权价值?任何帮助将不胜感激。
casper.evaluate
在沙箱内执行 javascript。您必须专门 return 来自该函数的数据,因为在那里创建的变量将不存在于主脚本中。正确的实现方式:
/// MAIN SCRIPT CONTEXT
casper.then(function(){
// Value which is returned from sandbox must be saved in some local variable
var localOptions = this.evaluate(function(){
// SANDBOX CONTEXT -------------------------------
// Dont return objects. Return arrays, strings, numbers
var options = [];
options = [].map.call(document.querySelectorAll('select[name="complist"] option'), function(option){
return option.innerText;
});
// You have to return scraped data back to the outer script
return options;
// END OF SANDBOX CONTEXT -----------------------
});
console.log(">>> " + localOptions);
// just "options" array does not exist here
});
我已经测试过了,确实有效!
var casper = require('casper').create({verbose: true,logLevel: "debug"});
casper.start('http://www.ddbst.com/unifacga.html',function(){
this.withFrame('ircframe',function(){
this.click('input[id="ID4"]');
this.wait(0,function(){
this.fillSelectors('form[name="opeform"]', {'input[name="ddbnumber"]': '155'},false);
});
this.wait(0,function(){this.click('input[name="search_ddbnum"]');});
this.wait(0,function(){
var i,o=this.fetchText('select[name="complist"]');
console.log("The value is: "+o)
});
});
});
casper.then(function(){this.capture('test.png');});
casper.run();
您可以运行它:
./casperjs --web-security=no test.js >>/dev/stdout
我正在尝试打印 "complist" 中每个选项的值,看起来像这样:
<select name="complist">
<option selected="" value="111 1">107-83-5 C6H14 2-Methylpentane</option>
<option value="1 24"> 75-07-0 C2H4O Acetaldehyde</option>
<option value="6 2">106-93-4 C2H4Br2 Ethylene bromide</option>
</select>
我试过了:
casper.then(function(){
this.evaluate(function(){
//var options = document.querySelectorAll('select[name="complist"]');
var options = document.querySelector('select[name="complist"]');
})
for (var i=0; i< options.length; i++){
console.log(">>> " + options[i].textContent);
}
});
但我收到以下错误:
- 错误> ReferenceError:找不到变量:选项,错误
- 文件> phantomjs://code/gruppen3.js,警告
- 行 > 113,警告
- 功能>,警告
由 for 循环中的 options.length 产生:/
我尝试了一些其他方法(例如
要准确了解我在说什么,您可以:
- 导航到 http://www.ddbst.com/unifacga.html
- Select 选项编号。 4(DDB 搜索)
- 输入例如174作为ddb编号并提交。
- 您现在应该会看到 "complist" 只有一个水选项。
如何 return 期权价值?任何帮助将不胜感激。
casper.evaluate
在沙箱内执行 javascript。您必须专门 return 来自该函数的数据,因为在那里创建的变量将不存在于主脚本中。正确的实现方式:
/// MAIN SCRIPT CONTEXT
casper.then(function(){
// Value which is returned from sandbox must be saved in some local variable
var localOptions = this.evaluate(function(){
// SANDBOX CONTEXT -------------------------------
// Dont return objects. Return arrays, strings, numbers
var options = [];
options = [].map.call(document.querySelectorAll('select[name="complist"] option'), function(option){
return option.innerText;
});
// You have to return scraped data back to the outer script
return options;
// END OF SANDBOX CONTEXT -----------------------
});
console.log(">>> " + localOptions);
// just "options" array does not exist here
});
我已经测试过了,确实有效!
var casper = require('casper').create({verbose: true,logLevel: "debug"});
casper.start('http://www.ddbst.com/unifacga.html',function(){
this.withFrame('ircframe',function(){
this.click('input[id="ID4"]');
this.wait(0,function(){
this.fillSelectors('form[name="opeform"]', {'input[name="ddbnumber"]': '155'},false);
});
this.wait(0,function(){this.click('input[name="search_ddbnum"]');});
this.wait(0,function(){
var i,o=this.fetchText('select[name="complist"]');
console.log("The value is: "+o)
});
});
});
casper.then(function(){this.capture('test.png');});
casper.run();
您可以运行它:
./casperjs --web-security=no test.js >>/dev/stdout