javascript - 单击具有特定样式的 iframe

标签 javascript puppeteer captcha

我有一个包含大约 10 个 iframe 的页面。这些 iframe 中只有 1 个可见并且可见 iframe 的索引会在每次重新加载页面时发生变化。可见的 iframe 仅包含 display: block 样式,它不包含我可以用来选择它的任何其他内容,例如名称或标题。

例子:

<div class="container">
    <iframe style="display: none; width: 310px; height: 100px; border: 0px; 
    user-select: none;">
       <html>
         <body>
           <div class="button"/>
         </body>
       </html>
     </iframe> <--- not visible 
        
    <iframe style="display: block; width: 310px; height: 100px; border: 0px; 
    user-select: none;">
       <html>
         <body>
           <div class="button"/> // need to click this!
         </body>
       </html>
     </iframe> <--- visible :)
</div>

我的问题是如何在 puppeteer 中选择具有 display: block 样式的 iframe,然后单击其中的按钮。

我试图通过获取页​​面上的所有 iframe 来解决这个问题,然后循环并选择显示样式为“ block ”的 iframe:

 // select all iframes
 const Frames = await page.frames(); 
  
  // loop over iframes and check if iframe display is block or none.
  Frames.forEach(async (item, i) => {
    const frame = await item.contentFrame();
    const showingIframe = await page.evaluate(
      () => window.getComputedStyle(frame.querySelector('iframe')).display
    );

    if (showingIframe === 'block') {
      console.log('showing');
      // click button
    } else {
      console.log('not showing');
    }
  });

最佳答案

如果样式非常具体,您可以轻松找到一个元素。无需为此遍历所有帧。

const selector = `iframe[style*="display: block"]`
const visibleIframe = document.querySelector(selector);
console.log({ visibleIframe });

单击里面的按钮可以通过多种方式完成。这是一个普通的 javascript 解决方案,

visibleIframe.contentDocument.querySelector(".button").click()

关于javascript - 单击具有特定样式的 iframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68731100/

相关文章:

JavaScript 按相同的值对相似的对象进行分组

javascript - 如何从 grunt 模板正确访问用户的主目录?

node.js - Puppeteer 关闭 javascript 警报框

javascript - Puppeteer 无法获得完整的源代码

php - ?action=register URL 上的 WordPress 垃圾邮件

验证码验证

security - 在登录表单上放置验证码是不道德的吗?

javascript - 提高性能谷歌应用脚​​本将数据从多个电子表格复制到一个

javascript - 将音频isPlaying状态设置为当前音频唯一

node.js - 如何从puppeteer中的page.evaluate()返回值?