RangeError:超出了最大调用堆栈大小-Phantom JS

时间:2018-11-25 05:29:37

标签: javascript phantomjs

我正在单击网页上的一个按钮以加载更多数据,但是当我评估页面中的代码以单击该按钮时,出现了一个问题,提示Maximum call stack size exceeded。我不知道是什么引起了这个问题。

我递归调用函数evalRecursively()。因为在某些情况下必须递归调用此函数,所以在此函数中,我调用buttonLoad(),这会单击网页上的按钮。一切顺利,直到调用buttonLoad()为止,甚至没有,但是调用await ph_page.evaluate()并执行其中的代码时,会导致问题。

我的代码

function ScrapMetaData() {

  this.buttonLoad = async function() {
    await ph_page.evaluate(function() {

      var el = document.getElementsByClassName("load-more")[0];
      el.click();

    });

    return 0;
  }

}

var SMD = new ScrapMetaData();

function evalRecursively() {
  if (page_number == 4) { //res.data.pages
    count++;
    new ScrapMetaData().flush();
    _this.checkConditions();
    return;
  } else {
    if (companies[count].pages_defined === 1) {
      SMD.evaluatePage(
        companies[count].page_jobs_data_code
      ).then(function(evRes) {
        if (evRes.success) {
          event.emit("pageEvaluated", evRes);
          if (companies[count].pagination === 1) {
            SMD.clickNext(
              companies[count].next_page_button_code,
              companies[count].get_page_number_code
            ).then(function(clRes) {
              if (clRes.success) {
                evalRecursively();
              }
            });
          } else {
            SMD.buttonLoad(
              companies[count].button_loading_code
            ).then(function(btRes) {
              console.log(btRes);
            })
          }
        }
      });
    } else {
      SMD.evaluatePage(
        companies[count].page_jobs_data_code
      ).then(function(evRes) {
        if (evRes.success) {
          event.emit("pageEvaluated", evRes);
          if (companies[count].pagination === 1) {
            SMD.clickNext(
              companies[count].next_page_button_code,
              companies[count].get_page_number_code
            ).then(function(clRes) {
              if (clRes.success) {
                evalRecursively();
              }
            });
          } else {
            SMD.buttonLoad(
              companies[count].button_loading_code,
              companies[count].current_job_compare
            ).then(function(btRes) {
              console.log(btRes);
            })
          }
        }
      });
    }
  }
}
evalRecursively();

这是它提供的堆栈信息 The Image

0 个答案:

没有答案