Как найти несколько элементов в индексе div, используя Selenium - PullRequest
0 голосов
/ 17 марта 2019

Так что я сейчас пытаюсь найти все ссылки src среди списка сгенерированных div.Проблема в том, что он имеет то же имя класса и тег 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')

Ответы [ 2 ]

1 голос
/ 17 марта 2019

Для печати всех атрибутов 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
    
1 голос
/ 17 марта 2019

Ну, я не вижу никаких элементов с идентификатором намного меньше того, который вы указали, поэтому я точно не знаю, почему он не работает.Тем не менее, я думаю, что это может быть достигнуто довольно легко.Я заметил, что все теги img в HTML, которые вы вставили в свой вопрос, имеют 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 в массив, содержащий все ваши источники изображений.Дайте мне знать, если это помогает / не помогает.

Отказ от ответственности: я не видел всю вашу HTML-страницу, поэтому используемый мной селектор может не работать. Теперь у меня есть, и я думаю, что код должен работать для вас.

...