无法从 selenium

问题描述

我有以下 HTML 代码

...
<div class="media ipad_media" style="padding-top: 0;">
    <iframe src="//www.youtube.com/embed/XXXXXXXX" frameborder="0" allowfullscreen="allowfullscreen" width="618" height="330" data-gtm-yt-inspected-7182449_30="true"> 
    </iframe>
<div>
...
<div class="media ipad_media hidden-xs">
   <iframe src="//www.youtube.com/embed/XXXXXXXX" frameborder="0" allowfullscreen="allowfullscreen" width="618" height="330" data-gtm-yt-inspected-7182449_30="true">
   </iframe>
</div>

我想要 src 属性,它在两个 iframes 中实际上是相同的。我只是使用以下命令定位第一个元素:

elem = driver.find_element_by_class_name("media.ipad_media").find_element_by_tag_name("iframe")    

然后我执行以下操作:

print(elem.get_attribute('width'))
print(elem.get_attribute('frameborder'))
print(elem.get_attribute('allowfullscreen'))
print(elem.get_attribute('src'))
print(elem.get_attribute('source'))
print(elem.text)
print(elem.tag_name)

我在控制台中得到以下信息:

618
0
true

None

iframe

怎么可能在执行 print(elem.get_attribute('src')) 时什么都不做?如您所知,在控制台中执行 $$("div.media.ipad_media>iframe") 命令会得到 2

解决方法

<div> 标签是所需 <iframe> 标签的直接祖先。

要打印 src<iframe> 属性的值,您可以使用以下任一 Locator Strategies

  • 使用 css_selector

    print(driver.find_element_by_css_selector("div.media.ipad_media > iframe").get_attribute("src"))
    
  • 使用 xpath

    print(driver.find_element_by_xpath("//div[@class='media ipad_media']/iframe").get_attribute("src"))
    

理想情况下,您需要为 visibility_of_element_located() 引入 WebDriverWait,并且您可以使用以下任一 Locator Strategies

  • 使用 CSS_SELECTOR

    print(WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.CSS_SELECTOR,"div.media.ipad_media > iframe"))).get_attribute("src"))
    
  • 使用 XPATH

    print(WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.XPATH,"//div[@class='media ipad_media']/iframe"))).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