【问题标题】:Program freezes in nested loop at page.evaluate - Puppeteer - NodeJS程序在 page.evaluate 的嵌套循环中冻结 - Puppeteer - NodeJS
【发布时间】:2019-03-04 04:00:11
【问题描述】:

我是 puppeteer 的新手,我编写了一个程序来自动从下拉列表中选择一个选项。但是一旦进入第二个循环,它就会冻结。我尝试删除等待,并将返回语句换成数组,但无济于事(代码如下)。我该如何解决?谢谢! :) PS:如果您需要整个代码,请告诉我:)

var numDays = await page.evaluate(() => { //INIT DATAS
    return document.getElementsByClassName("input")
        .length;
});
console.log(numDays);
var selected = "";
for (var i = 0; i <
    numDays; i++) { // # of days signup loop
    var numOptions = await page.evaluate(i => { //INIT DATAS
        return document.getElementsByClassName("input")[i].options.length;
    }, i); //init data for numOptions loop
    for (var j = 1; j <
        numOptions; j++) { // 17x options loop | Find study hall option loop
        var result = await page.evaluate(i => {
            return document.getElementsByClassName("input")[i].options[j].value;
        }, i, j);
        var resultTxt = await page.evaluate(i => {
            return document.getElementsByClassName("input")[i].options[j].text;
        }, i, j);
        if (resultTxt.toLowerCase()
            .indexOf('study hall') != -1 || resultTxt.toLowerCase()
            .indexOf('catch up on work') != -1) {
            selected = result;
        } //choose study hall option
    }
}

【问题讨论】:

  • 您可以添加 html 和更多代码以便我们重现此内容吗? :D
  • 一些观察,尽管正如@Md.AbuTaher 所说,我们需要查看 HTML 和上下文:在第二个循环中,所有要评估的函数都指的是不同的(可能不是-existent)j,因为你将它传递给evaluate,但函数只需要i。其次,您说它在第二个循环中冻结;你怎么会知道这事?如果您更换第二个循环的主体,它仍然会冻结吗?第三,您似乎可以在单个 evaluate 调用中结合这两个函数来评估和检查结果。
  • Aankhen 应该提交他的评论作为答案:D
  • 我将编辑我的答案以感谢 Aankhen :)

标签: javascript node.js puppeteer


【解决方案1】:

好的,我找到了问题的问题...原来我在两个page.evaluates中没有正确导入j。 (真是个傻问题,不过现在已经解决了:)

感谢 Aankhen 帮助我解决问题 :) 如果您发帖,我可以将您的帖子标记为答案。请告诉我!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    相关资源
    最近更新 更多