我正在尝试使用 Python-selenium 从 iframe 元素中的 'src' 中提取 link,但我最终没有这样的元素错误

I am trying to extract a link from 'src' in an iframe element using Python-selenium but I end up with a no such element error

这是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")

但是也遇到无法定位元素的错误。有什么帮助吗?

像 selenium 这样的浏览器运行器可能很困难,因为运行器可能会在页面的所有元素首先加载之前执行脚本。我会尝试先添加等待元素。 python-selenium 文档在 https://selenium-python.readthedocs.io/waits.html#explicit-waits

中提供
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 属性的值,您需要引入 for the visibility_of_element_located() and you can use either of the following :

  • 使用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
    

参考资料

您可以在以下位置找到关于 的一些相关讨论: