Sla*_*off 6 xpath css-selectors web-scraping selectors-api casperjs
出于某种原因,当我尝试运行以下代码时:
var casper = require('casper').create();
var x = require('casper').selectXPath;
var links = [];
casper.start('http://www.website.com');
function getLinks() {
var links = document.querySelectorAll(x('//*[@id="horizontalList"]/li[@class="paddingRight6"]/a');
return Array.prototype.map.call(links, function(e) {
return e.getAttribute('href')
});
}
casper.then(function() {
links = this.evaluate(getLinks);
this.echo(links);
}
casper.run();
Run Code Online (Sandbox Code Playgroud)
返回一个null对象,但是当我使用与thenClick方法相同的xpath选择器时,一切正常并且url会更改.为什么到底是这样的?
Sla*_*off 10
因此,事实证明querySelectorAll方法实际上不支持XPath.实际上它根本不是来自casperjs,而是由浏览器支持,这就是它接受CSS3选择器而不是XPath的原因.我很难弄清楚这一点,所以我想我会把它放在一起以防其他人遇到这个问题.你必须在casperjs中使用CSS3选择器,所以行:
var links = document.querySelectorAll(x('//*[@id="horizontalList"]/li[@class="paddingRight6"]/a');
Run Code Online (Sandbox Code Playgroud)
需要改为:
var links = document.querySelectorAll('ul#horizontalList li.paddingRight6 a');
Run Code Online (Sandbox Code Playgroud)
快乐的黑客