我无法找到确切的元素“ closeIcon”。请看一下是否有空,让我知道你的想法。
const PAGEURL = "https://www.shoepalace.com/";
try {
(async () => {
const browser = await puppeteer.launch({headless: false});
const page = await browser.newPage();
await page.goto(PAGEURL);
page.waitForNavigation();
const cancel = await page.waitForSelector('#cancelicon', {timeout: 60000});
cancel.click();
})();
} catch (err){
console.error(err);
}
function sleep(seconds)
{
var e = new Date().getTime() + (seconds * 1000);
while (new Date().getTime() <= e) {}
}
这是页面元素的ss:
https://gyazo.com/f3ba9895dfb79f224119acfbdc7901bb
这是控制台中的错误:
答案 0 :(得分:0)
您要查找的元素位于iframe中。
每个iframe都是页面的不同框架,通常在调用时看不到它,例如:
page.waitForSelector('#cancelicon', {timeout: 60000});
实际上,您致电:
page.mainFrame().waitForSelector('#cancelicon', {timeout: 60000});
因此,您需要选择适合选择器的正确框架。
如果可以帮助我编码此快捷方式,使框架与选择器相关联(如果未找到,则为-1,主框架为0,相应框架为一个数字):
async function getFrameAssociatedToSelector(page, selector){
if (selector !== ''){
let querySelectoronPage = await page.$(selector);
if(querySelectoronPage === null){
for(var i=0;i<page.mainFrame().childFrames().length;i++){
let querySelectoronFrame = await page.mainFrame().childFrames()[i].$(selector);
if(querySelectoronFrame === null){
continue;
}else{
return i+1;
};
};
return -1;
}else{
return 0;
}
}else{
return -1;
};
};
您可以按以下方式使用它:
if(stepFrame === 0){
page.waitForSelector('#cancelicon', {timeout: 60000});
}else{
page.mainFrame().childFrames()[stepFrame-1].waitForSelector('#cancelicon', {timeout: 60000});
};