如何在CasperJS中获取href属性值?

时间:2014-12-31 04:24:29

标签: javascript attributes web-crawler casperjs

这是我用代码来处理元素中的href值:

var info = this.getElementsInfo(selector); // an array of object literals
for (var i = firstp; i < info.length; i=i+interval) {
    if(i==0)
        this.echo('"'+info[i].getAttribute('href')+'"');
    else
        this.echo(',"'+info[i].getAttribute('href')+'"');
}

2 个答案:

答案 0 :(得分:2)

我在documentation找到了一些东西,我可以用这样的代码来解决我的问题:

var info = this.getElementsInfo(selector); // an array of object literals
for (var i = firstp; i < info.length; i=i+interval) {
    if(i==0)
        this.echo('"'+info[i].attributes.href+'"');
    else
        this.echo(',"'+info[i].attributes.href+'"');
}

现在有效。

之前使用getAttribute之前没有工作的原因是casper.getElementsInfo()返回DOM节点的普通对象表示,而不是实际的DOM节点。由于CasperJS(和PhantomJS)有两个上下文,DOM节点不能传递出页面上下文(在casper.evaluate()内)。

答案 1 :(得分:1)

请按照以下步骤操作:

首先获取路径

some variable = 'table#dgResults > tbody > tr:nth-child(1) > td > b a';

它(这只是对“某些变量”的解释):

table[id="dgResults"] -> (couldn't add to the stupid gray box)

    tbody

      tr-> lst column

          b
              a -> all href tags are here 

接下来使用getElementsAttribute

var nextStep = this.getElementsAttribute(elem, 'href');

然后转储它:

utils.dump(nextStep);

转储时应该会看到所有链接。请记住,this.getElementAttribute()在标记之间返回1个值,this.getElementsAttribute()返回标记之间的所有值。