You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Selenium:如何获取无src属性的iframe内#document中的链接?

Python Selenium:如何获取无src属性的iframe内#document中的链接?

我来帮你搞定这个问题!这种iframe没有显式src属性、内容靠动态方式加载的情况确实有点绕,但用Selenium还是能轻松拿到你要的#document对应的链接,下面给你一步步讲怎么做:

  • 第一步:先切换到目标iframe的上下文
    哪怕iframe没有src属性,我们还是可以通过它的其他特征(比如title、标签位置等)定位到它,然后切换进去。比如你例子里的iframe有title="PDF Preview",就可以这么定位:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    
    driver = webdriver.Chrome()
    # 定位到目标iframe元素
    target_iframe = driver.find_element(By.XPATH, "//iframe[@title='PDF Preview']")
    # 切换到该iframe的上下文
    driver.switch_to.frame(target_iframe)
    
  • 第二步:获取#document对应的真实链接
    切换到iframe之后,Selenium的上下文就变成了这个iframe内部的#document文档,这时候直接用driver.current_url就能拿到这个文档对应的实际URL,也就是你要找的#document里的链接:

    # 获取iframe内#document的真实链接
    document_url = driver.current_url
    print("找到的#document链接:", document_url)
    

    如果这个方法没生效,还可以用执行JavaScript的方式直接获取文档URL:

    document_url = driver.execute_script("return document.URL;")
    
  • 额外情况:如果要找iframe内的资源链接(比如embed里的PDF)
    要是你最终要的是iframe里嵌套的资源(比如你例子里的embed标签对应的PDF链接),可以等元素加载完成后再获取它的src属性。比如可以用显式等待确保embed的src不是初始的about:blank:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    # 等待embed元素加载完成且src不为空
    embed_element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.TAG_NAME, "embed"))
    )
    # 获取embed的实际资源链接
    embed_src = embed_element.get_attribute("src")
    print("Embed对应的资源链接:", embed_src)
    

你之前说切换到iframe后只能拿到html、head等标签的属性,试试上面的current_url或者JS获取document.URL的方法,应该就能拿到#document对应的真实链接啦!

备注:内容来源于stack exchange,提问作者Shermaine Yeo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 10:17:57