如何在木偶中找到元素?

时间:2020-08-25 04:00:46

标签: node.js puppeteer

我无法找到确切的元素“ 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

这是控制台中的错误:

https://gyazo.com/9a15f0e86f1c253182da89358f3de4b0

1 个答案:

答案 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});
    };