iframe的属性获取

必须先切换到 iframe 内,才能访问内部文档的属性,

python 复制代码
driver.switch_to.frame(iframe_element)  # 切换到 iframe

获取文档标题(document.title)

python 复制代码
title = driver.title  # 直接获取当前文档标题
# 或通过 JS
title = driver.execute_script("return document.title")

当前 iframe 内页面的 URL

iframe 内页面的 URL 并不是浏览器地址栏的 URL,而是其自身加载的地址。用driver.current_url获取到是主文档的url,并不是iframe的URL

可以通过以下方式获取:

python 复制代码
current_url_in_iframe = driver.execute_script("return document.location.href")

获取iframe的加载状态

python 复制代码
iframe_ready_state = driver.execute_script("return document.readyState")

获取来源页面 URL

python 复制代码
iframe_referrer = driver.execute_script("return document.referrer")

获取页面性能/几何信息

python 复制代码
# 页面可视区域宽高
viewport_width = driver.execute_script("return window.innerWidth")
viewport_height = driver.execute_script("return window.innerHeight")

# 页面总宽高(含滚动)
page_width = driver.execute_script("return document.body.scrollWidth")
page_height = driver.execute_script("return document.body.scrollHeight")

完整示例:

python 复制代码
# 假设已定位到 iframe 元素
iframe = driver.find_element(By.CSS_SELECTOR, "iframe.layui-layer-iframe")

# 获取 iframe 本身的属性
iframe_src = iframe.get_attribute("src")
iframe_title_attr = iframe.get_attribute("title")

# 切换到 iframe
driver.switch_to.frame(iframe)

# 获取内部文档的标题和 URL(同域下)
inner_title = driver.title
inner_url = driver.execute_script("return document.location.href")

print(f"iframe 元素 src: {iframe_src}")
print(f"iframe 元素 title 属性: {iframe_title_attr}")
print(f"iframe 内部文档标题: {inner_title}")
print(f"iframe 内部文档 URL: {inner_url}")

# 切回主页面
driver.switch_to.default_content()

注意事项

  1. 跨域限制 :如果 iframe 加载的是不同域的页面(如外部网站),出于浏览器安全策略,你将无法通过 driver.execute_script() 访问其内部的 document 属性(会报跨域错误)。这种情况下只能获取 iframe 元素本身的属性(如 src、title 等)。

  2. 等待加载:在获取内部文档属性前,确保 iframe 已经完全加载,可以使用:

    python 复制代码
    driver.switch_to.frame(iframe_element)
    
    WebDriverWait(driver, 10).until
    (lambda d: d.execute_script("return document.readyState") == "complete")
  3. 切换回主页面:操作完 iframe 后,记得切回默认内容:

    python 复制代码
    driver.switch_to.default_content()
相关推荐
蹊黎4 小时前
C++中vector类的部分简单实现
开发语言·c++·visual studio
半个落月9 小时前
LangChain Agent 中间件实战(上):生命周期、状态、短路与工具包
javascript·langchain
半个落月10 小时前
LangChain Agent 中间件实战(下):DeepAgents文件权限、长期记忆与对话摘要
javascript·langchain
程序猿追10 小时前
kotlin-retry 接入鸿蒙后,怎样确认它真的会停止重试
开发语言·kotlin·harmonyos
我是人✓10 小时前
Java文件上传三方式对比:从传统到SpringBoot
java·开发语言
智能直播10 小时前
网络RTMP拉流不卡顿、声音不同步,一文讲透缓冲区、时间戳
开发语言·ffmpeg·php·音视频·视频编解码
墨云安全11 小时前
内网资产无法暴露到公网,怎么做安全检测?2026 年内网渗透测试的落地路径
开发语言·安全·网络安全·渗透测试·php
u01110267511 小时前
JPG、PNG、WebP 怎么选?按透明度、体积和使用场景做判断
前端·javascript·vue.js·图像处理·ai作画
摇滚侠11 小时前
《计算机是如何工作的:人人都能懂的计算机软硬件工作原理》第 9 章 机器码与汇编语言 阅读笔记 9
java·开发语言·笔记
Cc.Y12 小时前
Java零基础入门:深入Java核心:文件IO与序列化全解
java·开发语言·python