如何使用CasperJS和XPath获取元素的HREF值

时间:2014-06-20 16:04:39

标签: xpath web-scraping casperjs

我正在尝试找到定位PDF下载链接的最佳方法,并将其下载到我计算机上的正确目录中。我正在尝试使用CasperJS& XPath,因为它似乎是最简单的方法。

目前我所拥有的:

var x = require('casper').selectXPath;
var fs = require('fs');
casper.start('http://www.regulations.gov/#!documentDetail;D=APHIS-2012-0047-0291');

var classVal = x("//a[@class='gwt-Anchor']/@href");
casper.download(classVal, 'C:/users/bnickerson/desktop/script/result/p.pdf');

每当运行时,它会下载一个文件,但它的html文件名为p.pdf。如果我打开它,我明白了:

HTTP Status 404 - /%5Bobject%20Object%5D
type Status report
message /%5Bobject%20Object%5D
description The requested resource (/%5Bobject%20Object%5D) is not available.
JBoss Web/7.0.17.Final

我正在尝试从以下位置获取此PDF的页面: http://www.regulations.gov/#!documentDetail;D=APHIS-2012-0047-0291

1 个答案:

答案 0 :(得分:2)

您应该仔细查看 download 接受的参数。不要混合选择器和普通字符串。 classVal是一个XPath选择器,不是选择器后面的文本内容。您可以使用 getElementAttribute 检索元素属性。

casper.then(function(){
    var classVal = x("//a[@class='gwt-Anchor' and contains(@href,'contentType=pdf')]");
    var url = casper.getElementAttribute(classVal, "href");
    casper.download(url, 'C:/users/bnickerson/desktop/script/result/p.pdf');
});