javascript - CasperJS/PhantomJS .then 在 do/while 循环中不起作用

标签 javascript loops phantomjs casperjs

这样的事情对我来说似乎很合乎逻辑,但导致 phantom wtfcrash (这就是它在日志中的名称,但没有提供有用的信息)...

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);

最佳答案

有不同的可能性,如果你只想静态重复一些事情,你可以使用 casper.repeat() -> how to have a variable value for casper.repeat

如果你想用 multipe then 在里面和断点做一段时间,据我所知,你仍然必须使用递归函数。这是一个例子:

  ...
  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);
    });
  }
  ...

这仍然不是最佳方案(可能会导致内存问题),但它可以工作。 :)

关于javascript - CasperJS/PhantomJS .then 在 do/while 循环中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41964704/

相关文章:

java - 如何在Java中为ArrayList中的所有元素设置文本颜色?

javascript - 如何访问 ion-header-bar 中保存为指令的当前 View 的 Controller ?

javascript - 选项卡,隐藏第一个选项卡上的上一个选项卡和最后一个选项卡上的下一个选项卡

javascript - 围绕 Threejs 对象运行时如何保持颜色混合相同?

linux - FreeBSD Linux 库安装

python - 将 Selenium IDE 脚本导入为 unittest.TestCase 并动态修改

javascript - 使用 PhantomJS 操作 DOM

javascript - 'props' 被分配了一个值但从未使用过 no-unused-vars vue3

c# - 在 XNA 中依次显示列表中的名称

php - 带有 SimpleXMLElement 的大型 PHP for 循环非常慢 : memory issues?