如何使用 Selenium 在 div 索引中查找多个元素

How to find multiple elements within an index of divs using Selenium

所以我目前正在尝试在生成的 div 列表中查找所有 src 链接。问题是它与页面上的其他元素共享相同的 class 名称和 alt 标记,因此我无法使用 xpath。但是当我尝试使用它时,我只能返回 xpath 中索引的值。例如 div[3]。我怎样才能找到所有元素 div[1-inf] 而不仅仅是一个特定的元素?我发现 position() 作为参数,但我没有太多运气让它工作。也许我只是没有正确使用它。 driver.find_elements_by_xpath("//*[@id='tab-history-flow']/div[3]/a/img").get_attribute('src')

<div style="display:inline-block">
    <a target="_blank" title="Inventory Profile" href="http://csgo.exchange/profiles/76561197969720703">
    <img class="Avatar" alt="avatar" title="ArieBier | 2015-09-16 18:20:58" style="width:32px;height:32px" src="https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/df/dfd267c19d759f730e1051ae4657d0100a6b6c0d.jpg">
    </a>                                    
</div>
<div style="display:inline-block">
<a target="_blank" title="Inventory Profile" href="http://csgo.exchange/profiles/76561198136313290">
<img class="Avatar" alt="avatar" title="by | 2015-09-17 02:53:25" style="width:32px;height:32px" src="https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/5d/5d4c06db9ba89f8a945108af10075ebd348cd1ae.jpg">
</a>                                    
</div>
<div style="display:inline-block">
    <a target="_blank" title="Inventory Profile" href="http://csgo.exchange/profiles/76561198152970370">
    <img class="Avatar" alt="avatar" title="Marn | 2015-10-05 14:40:37" style="width:32px;height:32px" src="https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/ae/ae7878915405c9ad622c9d7fc3b52f3b71ed140a.jpg">
    </a>                                    
</div>

我已经尝试过了。

driver.find_elements_by_xpath("//*[@id='tab-history-flow']/div/a/img"[position() < 1000]).get_attribute('src')
driver.find_elements_by_xpath("//*[@id='tab-history-flow']/div[position() < 1000]/a/img").get_attribute('src')

好吧,我没有看到任何元素的 id 比您指定的要少得多,所以我不知道它为什么不起作用。但是,我认为这可以很容易地完成。我注意到您在问题中粘贴的 HTML 中的所有 img 标签都有 class="Avatar"。以下是我获取图片来源的方式:

images = driver.get_elements_by_css_selector('#tab-history-flow > div > a > img')
for image in images:
    image = image.get_attribute(src)

这应该将 images 变成一个包含所有图像源的数组。如果这 does/doesn 没有帮助,请告诉我。

免责声明:我没有看到您的整个 HTML 页面,所以我使用的选择器可能不起作用。 现在我有了,我认为代码应该适合你。

要打印所有 src 属性 您可以使用以下任一方法 :

  • 使用CSS_SELECTOR:

    print([element.get_attribute('src') for element in WebDriverWait(driver, 10).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "#tab-history-flow a[title='Inventory Profile']>img.Avatar[alt='avatar']")))])
    
  • 使用XPATH:

    print([element.get_attribute('src') for element in WebDriverWait(driver, 10).until(EC.visibility_of_all_elements_located((By.XPATH, "//*[@id='tab-history-flow']//a[@title='Inventory Profile']/img[@class='Avatar' and @alt='avatar']")))])
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC