如何让 puppeteer 等待元素加载(在循环中)?
How do I make puppeteer wait for element to load (in a loop)?
我正在尝试使用 puppeteer 来填写表格并获得结果。
正确提交表单后,会出现包含 #some_id
结果的 table。现在我正在寻找一种等待 table 加载的好方法,如果代码失败,请重做填写表单的过程,直到它正常工作。我希望它做这样的事情(伪代码):
while(table_is_not_loaded){
get_information;
fill_in_the_form;
submit_the_form;
}
我认为使用 page.waitForSelector()
函数也许可以实现,但我不能按我想要的方式使用它,而且我也不知道如果选择器未准备好或不可见它如何处理错误。
你可以这样做:
let table_is_loaded = true;
await page.waitForSelector('someID').catch(e => table_is_loaded = false);
while(!table_is_loaded){
get_information;
fill_in_the_form;
submit_the_form;
table_is_loaded = true;
await page.waitForSelector('someID').catch(e => table_is_loaded = false);
}
可能是这样的:
while(true){
try {
await page.waitForSelector('#foo')
get_information;
fill_in_the_form;
submit_the_form;
break
} catch(e) {
}
}
经过一些搜索和尝试不同的代码片段后,我找到了一个解决方案,它使用 .$eval()
方法访问 html 属性并检查元素的高度(您也可以检查其他东西以及显示或可见性)
const isNotHidden = await mainPage.$eval(
"#some_id",
elem => {
return (
window.getComputedStyle(elem).getPropertyValue("height") >= "5px"
);
}
);
link 帮助我实现这一目标的主要答案:
我正在尝试使用 puppeteer 来填写表格并获得结果。
正确提交表单后,会出现包含 #some_id
结果的 table。现在我正在寻找一种等待 table 加载的好方法,如果代码失败,请重做填写表单的过程,直到它正常工作。我希望它做这样的事情(伪代码):
while(table_is_not_loaded){
get_information;
fill_in_the_form;
submit_the_form;
}
我认为使用 page.waitForSelector()
函数也许可以实现,但我不能按我想要的方式使用它,而且我也不知道如果选择器未准备好或不可见它如何处理错误。
你可以这样做:
let table_is_loaded = true;
await page.waitForSelector('someID').catch(e => table_is_loaded = false);
while(!table_is_loaded){
get_information;
fill_in_the_form;
submit_the_form;
table_is_loaded = true;
await page.waitForSelector('someID').catch(e => table_is_loaded = false);
}
可能是这样的:
while(true){
try {
await page.waitForSelector('#foo')
get_information;
fill_in_the_form;
submit_the_form;
break
} catch(e) {
}
}
经过一些搜索和尝试不同的代码片段后,我找到了一个解决方案,它使用 .$eval()
方法访问 html 属性并检查元素的高度(您也可以检查其他东西以及显示或可见性)
const isNotHidden = await mainPage.$eval(
"#some_id",
elem => {
return (
window.getComputedStyle(elem).getPropertyValue("height") >= "5px"
);
}
);
link 帮助我实现这一目标的主要答案: