• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

CasperJS / PhantomJS。然后在do / while循环不起作用

用户头像
it1352
帮助1

问题说明

这样的事情对我来说似乎很合乎逻辑但却引起了wtfcrash的幻象(这就是在日志中调用它但没有提供有用的信息)...

Something like this seemed pretty logical to me but caused phantom to wtfcrash (That's what it's called in the log but doesn't give helpful info)...

do {
    casper.then(function() {
        var targetFound = false;
        links = this.evaluate(getLinks);

        var searchResultsAr = [];
        for (var link in links) {
            searchResultsAr.push(links[link].replace('/url?q=', '').split('&sa=U')[0]);
        }

        for (var result in searchResultsAr) {
            if (searchResultsAr[result] == target) {
                targetFound = true;
                casper.echo(targetFound);
                break;
            }
        }
        if(targetFound)
        {
            break;
        }
    });
}while(!targetFound);

正确答案

#1

如果你只想重复,有不同的可能性静态时间你可以使用casper.repeat() - > 如何为casper.repeat设置一个变量值

There are different possibilies, if you just want to repeat things static times you can use casper.repeat() -> how to have a variable value for casper.repeat

如果你想用multipe做一段时间然后在内部和断点你仍然需要使用递归据我所知,功能。下面是一个例子:

If you want to do a while with multipe then's inside and a break point you still have to use a recursive function as far as i know. Here is an example:

  ...
  casper.then(function() {
    loopValidConf.call(this, 0, 15);
  });
  casper.then(function() {
    casper.test.assert(exists, 'true after 15 tries!')
  });

  function loopValidConf(index, numTimes) {
    if (exists === true || index >= numTimes) {
      return;
    }
    casper.then(function() {
      casper.reload(function() {
        casper.echo("reset values");
      });
      casper.then(function() {
        // set some values here
      });
      casper.then(function() {
        casper.waitForSelector(".selector")
      });
      casper.then(function() {
        if (casper.exists('.targetSelector')) {
          exists = true;
          casper.echo('targetSelector exists!');
        } else {
          casper.echo('targetSelector doesnt exists, try it once more!');
        }
      });
    });
    casper.then(function() {
      loopValidConf.call(this, index   1, numTimes);
    });
  }
  ...

这仍然不是最佳的(可能导致记忆问题),但它的工作原理。 :)

This is still not the optimum (could cause memory problems), but it works. :)

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /reply/detail/tanhcfiebc
系列文章
更多 icon
同类精品
更多 icon
继续加载