我正在尝试使用 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
参考资料
您可以在以下位置找到关于 的一些相关讨论:
这是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 属性的值,您需要引入 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
参考资料
您可以在以下位置找到关于