Usar XPath con CasperJS QuerySelectorTodo no funciona
css-selectors web-scraping (2)
Entonces, resulta que el método querySelectorAll en realidad no es compatible con XPath. De hecho, no proviene de casperjs en absoluto, y es compatible con el navegador, por lo que acepta selectores CSS3 y no XPath. Fue difícil para mí darme cuenta de eso, así que pensé que pondría esto en caso de que alguien más tuviese este problema. Tienes que usar selectores CSS3 para esto dentro de casperjs así que la línea:
var links = document.querySelectorAll(x(''//*[@id="horizontalList"]/li[@class="paddingRight6"]/a'');
Necesita ser cambiado a:
var links = document.querySelectorAll(''ul#horizontalList li.paddingRight6 a'');
Feliz hacking
Por alguna razón, cuando intento ejecutar el siguiente código:
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();
Devuelve un objeto nulo, pero cuando uso el mismo selector xpath junto con el método thenClick, todo funciona bien y la URL cambia. ¿Por qué demonios es eso?
La siguiente función funciona para mí con Xpath.
function getLinks() {
var links =__utils__.getElementsByXPath(''//*[@id="horizontalList"]/li[@class="paddingRight6"]/a'');
return Array.prototype.map.call(links, function(e) {
return e.getAttribute(''href'');
});
}