如何将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。
我想知道如何选择最后一个元素。
替换此:
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"]')
@ArtjomB。我同意,但我不知道casperjs的选择支持,这就是为什么我没有任何额外的调整就op的问题给出了明确的答案。除此之外,我不能看到一个场景,他将永远把div元素中的href属性放在第一位... – Banana 2014-12-19 09:03:24
通常它(PhantomJS)支持所有的CSS3选择器,但有些东西是像“nth-child”这样的事情,因此在这些情况下使用XPath是很好的。 – 2014-12-19 09:06:11
我明白了。在那种情况下,我坚信op的语言障碍会导致他错误地提出他的问题。我会更新我的答案。 – Banana 2014-12-19 09:07:04
林不知道什么这个casperjs时,但不是发现** ONE **的要点是要找到一个,而不是两个或更多?此外,要选择多个元素,用逗号分隔它们,而不是空格。空间会搜索下一个元素作为前一个元素的子元素。 – Banana 2014-12-19 08:25:05
现在,这是无效的HTML。一个id应该只在DOM中使用一次。你确定这是DOM的样子吗? – 2014-12-20 09:22:18
是的。有些网站想写一篇文章,然后复制并粘贴文本的内容。 有什么办法可以解决? – Kang 2014-12-20 13:26:51