如何解决我正在尝试使用Python-selenium在iframe元素中从“ src”提取链接,但最终没有此类元素错误
这是HTML
<div class="bg_tv col-md-12 online">
<iframe width="100%" height="460" src="https://www.youtube.com/embed/dtKciwk_si4" scrolling="OFF" frameborder="0" allowfullscreen=""></iframe></div>
我尝试过:
browser.find_element(By.TAG_NAME,"iframe").get_attribute("src")
但是我得到了
no such element: Unable to locate element: {"method":"css selector","selector":"iframe"}
然后我尝试了XPATH:
browser.find_element(By.XPATH,"/html/body/div/div[3]/div/div[2]/div[1]/iframe").get_attribute("src")
但是也无法定位元素错误。有什么帮助吗?
解决方法
像硒这样的浏览器启动器可能很困难,因为启动器可能在页面的所有元素都先加载之前就正在执行脚本。我会尝试先添加一个等待元素。如https://selenium-python.readthedocs.io/waits.html#explicit-waits
中的python-selenium文档所提供from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox()
driver.get("http://somedomain/url_that_delays_loading")
try:
element = WebDriverWait(driver,10).until(
EC.presence_of_element_located((By.TAG_NAME,"iframe"))
)
finally:
driver.quit()
如果该元素正在浏览器上下文中加载,则应该获取它。
,要打印<iframe>
的 src 属性的值,您需要为visibility_of_element_located()
引入WebDriverWait,并且可以使用以下任一{ {3}}:
-
使用
XPATH
:print(WebDriverWait(browser,20).until(EC.visibility_of_element_located((By.XPATH,"//div[@class='bg_tv col-md-12 online']/iframe[@src]"))).get_attribute("src"))
-
使用
CSS_SELECTOR
:print(WebDriverWait(browser,20).until(EC.visibility_of_element_located((By.CSS_SELECTOR,"div.bg_tv.col-md-12.online > iframe[src]"))).get_attribute("src"))
-
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
参考文献
您可以在Locator Strategies上找到一些相关的讨论:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。