【selenium自动化】关于无法切换到Iframe内部的情况

【背景】

有一个自动化任务,目的是每天6:00自动登录报表系统下载报表。
由于报表系统是一个Web应用,所以选用Selenium实现此自动化需求。
开发过程中发现,有一个步骤需要Switch到iframe内部,然后进一步选取iframe下的内容进行后续的操作。

【问题】

虽然通过find_element_by_xpath方法找到了iframe并成功switch,但发现iframe此时的outerHTML内容是空的,无法进行后续的操作。
代码示例如下:

from selenium import webdriver
import time

# 使用合适的 WebDriver 初始化浏览器
driver = webdriver.Chrome()  # 以 Chrome 浏览器为例,你也可以选择其他浏览器的 WebDriver

# 打开包含嵌套框架的网页
driver.get("http://example.com")  # 将 "http://example.com" 替换为你要访问的网页 URL

# 使用 iframe 的 name 属性值来找到 iframe 元素
iframe = driver.find_element_by_name("1")

# 切换到 iframe 上下文中
driver.switch_to.frame(iframe)

# 使用 JavaScript 获取 iframe 内部的内容
iframe_content = driver.execute_script("return document.body.innerHTML;")
print("IFrame content:")
print(iframe_content)

# 切换回到主页面上下文(如果需要的话)
driver.switch_to.default_content()

# 关闭浏览器
driver.quit()

由于iframe下内容为空,导致后续操作报错:无法为空对象设置属性。

【分析】

通过Print(iframe.get_attribute(“outerHTML”)),发现Switch肯定成功了,问题是iframe里面的内容没有加载出来,所以加Sleep给予加载时间。

【代码】

from selenium import webdriver
import time

# 使用合适的 WebDriver 初始化浏览器
driver = webdriver.Chrome()  # 以 Chrome 浏览器为例,你也可以选择其他浏览器的 WebDriver

# 打开包含嵌套框架的网页
driver.get("http://example.com")  # 将 "http://example.com" 替换为你要访问的网页 URL

# 使用 iframe 的 name 属性值来找到 iframe 元素
iframe = driver.find_element_by_name("1")

# 切换到 iframe 上下文中
driver.switch_to.frame(iframe)

# 等待一段时间,确保 iframe 内容加载完成
time.sleep(3)

# 使用 JavaScript 获取 iframe 内部的内容
iframe_content = driver.execute_script("return document.body.innerHTML;")
print("IFrame content:")
print(iframe_content)

# 切换回到主页面上下文(如果需要的话)
driver.switch_to.default_content()

# 关闭浏览器
driver.quit()

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每日出拳老爷子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值