Невозможно извлечь атрибут с помощью пакета Selenium - PullRequest
0 голосов
/ 17 апреля 2020

Общая идея заключается в извлечении DOM с использованием пакетов Selenium.

В частности, целью является извлечение значения max, которые находятся в классе pagination__input hide-phone, как показано ниже

<div class="pagination__input hide-phone">
   <input type="number" name="page" max="12" value="1">
</div>

Веб-сайт доступен по этой ссылке .

Для этого был разработан следующий код.

maxPage = self.browser.find_elements_by_css_selector( "[class='pagination__input hide-phone']" )
valueMax=maxPage.get_attribute( 'max' )

Однако была выдана следующая ошибка.

AttributeError: 'list' object has no attribute 'get_attribute'

Могу я узнать, в чем проблема. Заранее спасибо.

Редактировать 2

Как предложено @ Kunduk.

Согласно @Kunduk, следующая строка была соответственно адаптирована. В частности, добавьте self.

print( WebDriverWait( self.browser, 10 ).until( EC.visibility_of_element_located(
    (By.CSS_SELECTOR, "div.pagination__input.hide-phone>input[name='page']") ) ).get_attribute( "max" ) )

Однако я получил следующую ошибку

enter image description here

Редактировать 1:

В соответствии с предложением @ Jo sh

pages = self.browser.find_elements_by_css_selector( "[class='pagination__input hide-phone']" )
maxPages = [page for page in pages if page.get_attribute('max')]

Однако он возвращает результат [], также как показано на рисунке ниже:

enter image description here

Ответы [ 3 ]

1 голос
/ 17 апреля 2020

Чтобы получить максимальное значение страницы, вызовите WebDriverWait () и дождитесь presence_of_element_located () и следующих css selector.

driver.get("https://www.freepik.com/search?dates=any&format=search&page=1&query=Polygonal%20Human&sort=popular")
print(WebDriverWait(driver,10).until(EC.presence_of_element_located((By.CSS_SELECTOR,"div.pagination__input.hide-phone>input[name='page']"))).get_attribute("max"))

Вам необходимо импортировать следующие библиотеки.

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

snapshpt : enter image description here

1 голос
/ 17 апреля 2020

Используйте этот селектор div.pagination__input > input и вызовите WebDriverWait():

driver.get('https://www.freepik.com/search?dates=any&format=search&page=1&query=Polygonal%20Human&sort=popular')
element = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'div.pagination__input > input')))
print(element.get_attribute('max'))
0 голосов
/ 17 апреля 2020

find_elements_by_css_selector возвращает список элементов. Если вы хотите получить атрибут max первого, вы можете использовать это:

maxPage[0].get_attribute('max')

Вы также можете использовать find_element_by_css_selector (обратите внимание на отсутствие s после element ), чтобы получить только первый элемент на странице.

РЕДАКТИРОВАТЬ : Вы можете найти все элементы на странице, которые имеют истинное значение max, с пониманием списка:

pages = self.browser.find_elements_by_css_selector( "[class='pagination__input hide-phone']" )
maxPages = [page for page in pages if page.get_attribute('max')]

# maxPages now only contains elements where the `max` attribute is not
# `None`, `0`, `False`, etc.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...