【问题标题】:Unable to get_attribute('src') from iframe tag in selenium无法从 selenium 中的 iframe 标记中获取属性('src')
【发布时间】:2021-01-25 21:11:49
【问题描述】:

我有以下 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&gt;iframe") 命令会得到2

【问题讨论】:

  • 您使用什么定位器来定位 IFRAME?请将其添加到您的问题中。我的猜测是该页面有多个 IFRAME,而您最终没有找到您正在寻找的那个。
  • 另外:src 可以在页面上动态加载,您可以在填充之前获取它。
  • @JeffC 我已经相应地编辑了描述
  • @DMart 在打印 src 之前我已经让它休眠了 5 秒
  • "media.ipad_media" 不是类名。它实际上是两个类名(在 find_element_by_class_name() 中不起作用),但您混合了一些 CSS 选择器语法(两个类名之间的 .)。我建议您将链接的 find_element() 调用更改为 elem = driver.find_element_by_css_selector("div.media.ipad_media&gt;iframe")

标签: python-3.x selenium selenium-webdriver iframe getattribute


【解决方案1】:

&lt;div&gt; 标记是所需 &lt;iframe&gt; 标记的直接祖先。

要打印&lt;iframe&gt;src 属性的值,您可以使用以下任一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
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 2022-10-21
    • 1970-01-01
    • 2016-03-21
    • 1970-01-01
    相关资源
    最近更新 更多