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
相关产品推荐
相关产品推荐

