Как извлечь значение атрибута изображения с помощью Selenium Python

Я искал код XPath, чтобы получить значение атрибута элемента HTML в рамках моего тестирования.

<div class="gallery-list">
<figure class="figure hd" ng-class="profileGallery.css" profile-item-remove="9>
    <a href="https://#" data-login="" gallery-modal="9" rel="nofollow">
    <picture sl-video-preview="https://movie.mp4" sl-safe="" class="ng-isolate-scope sl-safe">
    </a>
</figure>
<div>

Мне нужно получить значение атрибута с помощью xpath sl-video-preview. Некоторые могут нам помочь. спасибо


person dmrpy    schedule 13.06.2019    source источник


Ответы (3)


Чтобы извлечь значение атрибута sl-video-preview, поскольку этот элемент является элементом Angular, у вас есть чтобы вызвать WebDriverWait для visibility_of_element_located(), и вы можете использовать любой из следующих Стратегии поиска:

  • Использование CSS_SELECTOR:

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.gallery-list > figure.figure.hd > a > picture.ng-isolate-scope.sl-safe"))).get_attribute("sl-video-preview"))
    
  • Использование XPATH:

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='gallery-list']/figure[@class='figure hd']/a/picture[@class='ng-isolate-scope sl-safe']"))).get_attribute("sl-video-preview"))
    
  • Примечание. Вы должны добавить следующие импорты:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
person DebanjanB    schedule 13.06.2019
comment
улучшите свой пример, отлично работает для того, что мне нужно .. большое спасибо /o/ - person dmrpy; 16.06.2019
comment
в некоторых случаях изображение атрибута отображается много раз в списке div-галереи.. мне нужно получить все фигуры и поместить их в цикл, чтобы получить по одному - person dmrpy; 16.06.2019
comment
@dmrpy Можете ли вы задать новый вопрос с вашим новым требованием, пожалуйста? Участники StackOverflow будут рады вам помочь. - person DebanjanB; 16.06.2019
comment
задайте новый вопрос ниже. - person dmrpy; 07.07.2019

Вот общий xpath, который вы можете использовать.

//figure[@class='figure hd']/picture

И вы должны получить атрибут «sl-video-preview».

Вывод консоли Chrome:

введите здесь описание изображения

person supputuri    schedule 13.06.2019

у меня проблема, почему в некоторых случаях фигура тега появляется несколько раз, и этот пример @DebanjanB получает только одну запись, тогда мне нужны все результаты.

<div class="gallery-list">
<figure class="figure" ng-class="profileGallery.css" profile-item-remove="9>
    <a href="https://#" data-login="" gallery-modal="9" rel="nofollow">
    <picture sl-video-preview="https://movie.mp4" sl-safe="" class="ng-isolate-scope sl-safe">
    </a>
</figure>
<figure class="figure hd" ng-class="profileGallery.css" profile-item-remove="9>
    <a href="https://#" data-login="" gallery-modal="9" rel="nofollow">
    <picture sl-video-preview="https://movie.mp4" sl-safe="" class="ng-isolate-scope sl-safe">
    </a>
</figure>
<figure class="figure" ng-class="profileGallery.css" profile-item-remove="9>
    <a href="https://#" data-login="" gallery-modal="9" rel="nofollow">
    <picture sl-video-preview="https://movie.mp4" sl-safe="" class="ng-isolate-scope sl-safe">
    </a>
</figure>
<div>

Пример XPath, который работает:

print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='gallery-list']/figure[@class='figure hd']/a/picture[@class='ng-isolate-scope sl-safe']"))).get_attribute("sl-video-preview"))

Как получить все записи?

person dmrpy    schedule 06.07.2019