• Python实战——Selenium与iframe结合应用


    1. 页面中为什么会存在iframe

    网页中存在iframe(内联框架)的主要原因是为了实现页面的嵌套和分割,使得网页可以同时加载多个独立的HTML文档

    以下是一些常见的使用场景和目的:

    1. 嵌入其他网页或内容:通过使用iframe,可以将其他网页或外部内容嵌入到当前页面中。这对于显示来自不同源的内容、展示广告、加载地图或社交媒体插件等功能非常有用。

    2. 分割页面:有时,将页面分割为多个部分以便同时显示不同的内容是很有帮助的。通过在一个页面中使用多个iframe,可以在每个iframe中加载不同的内容,使页面更加灵活和可定制。

    3. 安全性:使用iframe可以实现安全隔离,防止恶意或不受信任的内容对整个页面产生影响。通过将不受信任的内容放置在单独的iframe中,并限制其与主页面之间的交互,可以提高页面的安全性。

    4. 平行加载:当需要同时加载多个独立的内容时,可以使用iframe。通过将内容分散到多个iframe中,可以并行加载它们,从而提高网页的加载速度和性能。

    需要注意的是,使用iframe也可能引起一些问题,例如可能会导致SEO(搜索引擎优化)问题、复杂的页面结构等。因此,在使用iframe时,应权衡其优缺点,并确保合理使用。

    2.需求:如何获取到包含"确定"按钮的元素

    页面示例代码

    <body>
        <iframe>
            <div class="btn-group">
            <button class="primary" onclick="handlerClick()">已阅读</button>
        </div>
        </iframe>
    
    </body>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    解决:

    要获取包含 “确定” 按钮的元素,您需要首先切换到 iframe 中,然后再找到按钮元素。以下是使用 Selenium 和 Python 进行这一操作的示例代码:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.keys import Keys
    
    # 启动浏览器
    driver = webdriver.Chrome()
    
    # 打开网页
    driver.get("网页地址")
    
    # 切换到 iframe 中
    iframe = driver.find_element(By.TAG_NAME, "iframe")
    driver.switch_to.frame(iframe)
    
    # 现在可以找到按钮元素
    button = driver.find_element(By.XPATH, "//button[contains(text(), '已阅读')]")
    
    # 点击按钮
    button.click()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这个示例中,首先通过 driver.find_element 方法找到 iframe 元素,然后通过 driver.switch_to.frame 方法切换到 iframe 中。接下来,我们可以在 iframe 中使用 driver.find_element 方法找到 “已阅读” 按钮元素,并进行点击操作。

    如果有多个iframe,确定在iframe1中,取消在 iframe2,需要依次点击确定和取消,如何操作

    3.需求延展:若页面中存在多个iframe,并且需要在不同的iframe 中执行操作

    若页面中存在多个iframe,并且需要在不同的iframe 中执行操作,您可以按照以下步骤来操作:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    
    # 启动浏览器
    driver = webdriver.Chrome()
    
    # 打开网页
    driver.get("网页地址")
    
    # 切换到 iframe1 中
    iframe1 = driver.find_element(By.XPATH, "xpath_of_iframe1")
    driver.switch_to.frame(iframe1)
    
    # 点击“确定”按钮
    button_confirm = driver.find_element(By.XPATH, "xpath_of_confirm_button_in_iframe1")
    button_confirm.click()
    
    # 切换回最外层页面
    driver.switch_to.default_content()
    
    # 切换到 iframe2 中
    iframe2 = driver.find_element(By.XPATH, "xpath_of_iframe2")
    driver.switch_to.frame(iframe2)
    
    # 点击“取消”按钮
    button_cancel = driver.find_element(By.XPATH, "xpath_of_cancel_button_in_iframe2")
    button_cancel.click()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    在这个示例中,我们首先切换到 iframe1 中,然后点击确认按钮。接着使用 driver.switch_to.default_content() 切回到最外层页面,再切换到 iframe2 中,然后点击取消按钮。

  • 相关阅读:
    [开源]MIT开源协议,基于Vue3.x可视化拖拽编辑,页面生成工具
    【数据结构--二叉树】平衡二叉树
    面试算法22:链表中环的入口节点(1)
    Workfine新手入门:分级预览
    【示波器专题】示波器的频响方式
    宕机了, redis如何保证数据不丢?
    gson TypeAdapter 适配器
    【网络编程】传输层——UDP协议
    深入解析Kubernetes admission webhooks
    Python编程 字符串的方法
  • 原文地址:https://blog.csdn.net/m0_57021623/article/details/134469463