【发布时间】: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