xpath - 将XPath与CasperJS QuerySelectorAll一起使用不起作用

原文 标签 xpath css-selectors web-scraping casperjs selectors-api

由于某些原因,当我尝试运行以下代码时:

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

返回一个空对象,但是当我将完全相同的xpath选择器与thenClick方法结合使用时,一切正常,并且url更改。那到底是为什么呢?

最佳答案

因此,事实证明querySelectorAll方法实际上并不支持XPath。实际上,它根本不是来自casperjs,并且受浏览器支持,这就是为什么它接受CSS3选择器而不接受XPath的原因。我很难弄清楚这一点,所以我想如果其他人遇到这个问题,我会提出来。您必须在casperjs中为此使用CSS3选择器,因此代码行:

var links = document.querySelectorAll(x('//*[@id="horizontalList"]/li[@class="paddingRight6"]/a');

需要更改为:
var links = document.querySelectorAll('ul#horizontalList li.paddingRight6 a');

快乐黑客

关于xpath - 将XPath与CasperJS QuerySelectorAll一起使用不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15773640/

相关文章:

python-3.x - 选择器无效:使用Selenium,不允许使用复合类名称错误

php - 如何通过html源中的<script>标记从网页中抓取数据。 (PHP)

python - 如何处理 Beautifulsoup 递归错误(或解析错误)

javascript - 确定此节点集的长度?

html - 查找 <em> 标签 selenium 中的元素

c# - 选择具有特定值的节点

python - 通过CSS选择器定位元素

css - 是否有一个“ previous sibling ”选择器?

python - BeautifulSoup/Python 的 NoneType 错误

python - 使用 Ansible 解析带有命名空间的 XML,特别是 JBOSS standalone.xml