Selenium Python: подсчет количества элементов(используя кнопку "next"

webdriver
python
Теги: #<Tag:0x00007f3d4453df08> #<Tag:0x00007f3d4453dd78>

(Наталья Рощина) #1

Всем привет! Столкнулась с проблемой: цикл неправильно подсчитывает количество элементов. Задача такова: нужно посчитать количество элементов в таблице, где есть Next кнопка и кликать до тех пор пока кнопка не станет disable. В итоге должно быть подсчитано общее количество элеметвов. Мой код:

count = 0
elem = self.driver.find_element(By.CSS_SELECTOR,'button.table-pagination-arrows__item.table-pagination-arrows__item_right')
while not elem.get_attribute('disabled'):
            self.driver.execute_script("document.querySelector('button.table-pagination-arrows__item.table-pagination-arrows__item_right').click();",elem)
            self.len_products_before = len(
                self.driver.find_elements(By.CSS_SELECTOR, ProductsLocators.NUMBER_PRODUCTS))
            count += self.len_products_before
            if elem.get_attribute('disabled'):
                self.len_products_before = len(
                    self.driver.find_elements(By.CSS_SELECTOR, ProductsLocators.NUMBER_PRODUCTS))
                count += self.len_products_before
                break
            print(count)

Буду очень благодарна за подсказку!


#2

@Natalia_Roshchyna

я правильно понял - проверяете сначала что :

while not elem.get_attribute('disabled'):

а потом все наоборот. :

if elem.get_attribute('disabled'):

получается два разных условия , но все равно происходит

            count += self.len_products_before

(Наталья Рощина) #3

@mrGorobec да,так как мне нужно чтобы количество подсчитало верно и на последней странице,где next disabled. Как можно изменить цикл,чтобы подсчитало верно элементы на всех страницах включая последнюю,где next disabled?


#5

disabled = elem.get_attribute('disabled')
count = 0
while not disabled:
    disabled = elem.get_attribute('disabled')
    self.driver.execute_script(
        "document.querySelector('button.table-pagination-arrows__item.table-pagination-arrows__item_right').click();",
        elem)
    count += len(self.driver.find_elements(By.CSS_SELECTOR, ProductsLocators.NUMBER_PRODUCTS))

#6

а больше потому что при последнем прогоне у тебя два разы считались елементы.
count += self.len_products_before
и при заходе в if

if elem.get_attribute('disabled'):
                self.len_products_before = len(
                    self.driver.find_elements(By.CSS_SELECTOR, ProductsLocators.NUMBER_PRODUCTS))
                count += self.len_products_before
                break

(Наталья Рощина) #7

Спасибо всем! Сработал у меня такой код:

disabled = elem.get_attribute('disabled')
count = 0
count += len(self.driver.find_elements(By.CSS_SELECTOR, ProductsLocators.NUMBER_PRODUCTS))
        while not disabled:
            count += len(self.driver.find_elements(By.CSS_SELECTOR, ProductsLocators.NUMBER_PRODUCTS))
            disabled = elem.get_attribute('disabled')
            self.driver.execute_script("document.querySelector('button.table-pagination-arrows__item.table-pagination-arrows__item_right').click();",elem)