繁体   English   中英

在每个循环迭代中单击不同的按钮

[英]Clicking a different button inside each loop iteration

我在单击每个循环(在CasperJS中)中的项目时遇到了麻烦,这只是代码的一小部分:

$("#id1",html).each(function( index ) {/*loop-start*/
    var job = {};/*init*/
    casperjs.click(".class2");
    boo.waitForSelector('selector3', function() {
        job.url = casperjs.getCurrentUrl();
        page.pagejobs.push(job);
        casperjs.back();

    casperjs.waitForSelector('selector4', function() {

    },function(){

    }, 6000);
  },function(){

  }, 10000);

});/*loop-end*/

基本上,我单击的是按钮( casper.click(".class2") ),在这里没问题。 第一次运行良好,是因为它单击了选择器(.class2)的第一个按钮,但问题是有很多选择器与同一类的选择器不同(它们是(#id1)的子代)。

所以它像:

<div id="id1">
  <div class="anything">
     <a button class="class2"> </a>
  </div>
  <div class="anything">
      <a button class="class2"> </a>
  </div>
</div>

所以这个casper.click(".class2")是我的问题。 我需要一种在each函数的每次迭代中选择当前按钮的方法。 请注意,我不能使用$(this)

CSS选择器提供了:nth-child()伪类,可用于根据索引选择子元素。 当只有.anything元素是#selector1goeshere子元素时,此方法可以按预期工作。

您可以使用

casper.click("#id1 > :nth-child("+(index+1)+") > a.class2");

您还可以使用XPath表达式执行此操作,而没有只.anything子项的限制。 例如这样:

var x = require("casper").selectXPath;
...
casper.click(x("//*[@id='id1']/*[contains(@class,'anything')]["+(index+1)+"]/a[contains(@class,'class2')]"));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM