必须先切换到 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()
注意事项
-
跨域限制 :如果 iframe 加载的是不同域的页面(如外部网站),出于浏览器安全策略,你将无法通过
driver.execute_script()访问其内部的document属性(会报跨域错误)。这种情况下只能获取 iframe 元素本身的属性(如src、title等)。 -
等待加载:在获取内部文档属性前,确保 iframe 已经完全加载,可以使用:
pythondriver.switch_to.frame(iframe_element) WebDriverWait(driver, 10).until (lambda d: d.execute_script("return document.readyState") == "complete") -
切换回主页面:操作完 iframe 后,记得切回默认内容:
pythondriver.switch_to.default_content()