如何将CasperJS findOne函数与两个或多个选择器一起使用?

问题描述:

对不起.. 此ariticle更新..如何将CasperJS findOne函数与两个或多个选择器一起使用?

元素被认为是一个,但发现两个或两个以上..对不起.. :)

<div class="rd_ft"> 
    <div id="prev_next"> 
     <a id="rd_prev" href="aaaa.html"></a> 
    </div> 
</div> 

<div class="rd_ft"> 
    <div id="prev_next"> 
     <a id="rd_prev" href="bbbb.html"></a> <--- it will select this element only 
    </div> 
</div> 

...... .....

var con_prev = 
    this.evaluate(function(){ 
     return __utils__.findOne('div[class="rd_ft"] div[id="prev_next"] a[id="rd_prev"]').getAttribute('href'); 
    }); 

它不应该工作的这个代码..

当前选择的数据是aaaa.html。

我想知道如何选择最后一个元素。

+0

林不知道什么这个casperjs时,但不是发现** ONE **的要点是要找到一个,而不是两个或更多?此外,要选择多个元素,用逗号分隔它们,而不是空格。空间会搜索下一个元素作为前一个元素的子元素。 – Banana 2014-12-19 08:25:05

+0

现在,这是无效的HTML。一个id应该只在DOM中使用一次。你确定这是DOM的样子吗? – 2014-12-20 09:22:18

+0

是的。有些网站想写一篇文章,然后复制并粘贴文本的内容。 有什么办法可以解决? – Kang 2014-12-20 13:26:51

替换此:

findOne('div[class="rd_ft"] div[id="prev_next"] a[id="rd_prev"]') 

与此:

findOne('div[class="rd_ft"], div[id="prev_next"], a[id="rd_prev"]') 

的第一个版本将搜索看起来像元素:

<div class="rd_ft"> 
    <div id="prev_next"> 
     <a id="rd_prev"></a> <--- it will select this element only 
    </div> 
</div> 

第二个版本将选择3个独立元素:

<div class="rd_ft"></div> 
<div id="prev_next"></div> 
<a id="rd_prev"></a> 

UPDATE

我刚在你的问题第二次看,看来,你可能会问错了问题。

如果您想要选择一个<a>元素作为其他两个div的子元素,那么如果您的div拥有多个类别,则它将不起作用。您正在测试div[class="rd_ft"],只有当div具有一个类时,它才会起作用。如果您的div有超过1类,你需要使用如下一类选择.来测试它:div.rd_ft

基本上,你想用这个:

findOne('div.rd_ft div[id="prev_next"] a[id="rd_prev"]') 
+0

@ArtjomB。我同意,但我不知道casperjs的选择支持,这就是为什么我没有任何额外的调整就op的问题给出了明确的答案。除此之外,我不能看到一个场景,他将永远把div元素中的href属性放在第一位... – Banana 2014-12-19 09:03:24

+0

通常它(PhantomJS)支持所有的CSS3选择器,但有些东西是像“nth-child”这样的事情,因此在这些情况下使用XPath是很好的。 – 2014-12-19 09:06:11

+0

我明白了。在那种情况下,我坚信op的语言障碍会导致他错误地提出他的问题。我会更新我的答案。 – Banana 2014-12-19 09:07:04