Использование Selenium в Python для нажатия всех кнопок на веб-странице - PullRequest
0 голосов
/ 16 февраля 2020

Я пытаюсь нажать на все кнопки на веб-странице. Я хотел бы иметь возможность щелкнуть их всех. веб-страница я могу нажать на одну из них, используя css селектор

browser.find_element_by_css_selector('li.clickable_area:nth-child(1) > div:nth-child(3)').click()

это селектор css для 5 кнопок

, за которыми следуют 5 кнопок этот шаблон:

Кнопка 1: li.clickable_area: nth - child(1) > div:nth - child(3)

Кнопка 2: li.clickable_area: nth - child(2) > div:nth - child(3)

Кнопка 3: li.clickable_area: nth - child(3) > div:nth - child(3)

Кнопка 4: li.clickable_area: nth - child(4) > div:nth - child(3)

Кнопка 5: li.clickable_area: nth - child(5) > div:nth - child(3)

Как я могу щелкнуть их все с помощью селектора css без написания кода для каждого?

Ответы [ 2 ]

1 голос
/ 16 февраля 2020

Вы можете использовать l oop для итерации и нажимать на количество кнопок.

number_of_buttons = 5
for x in range(number_of_buttons):
    button = browser.find_element_by_css_selector("li.clickable_area:nth-child(" + str(x+1) + ") > div:nth-child(3)")
    button.click()

Если вы хотите нажать на все li(x) > div:nth-child(3), вы можете использовать ниже.

number_li_elems=len(WebDriverWait(browser,30).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "li.clickable_area"))))
for x in range(number_li_elems):
    # you have to get the element by index every time, otherwise you will get StaleElement Exception
    button = browser.find_element_by_css_selector("li.clickable_area:nth-child(" + str(x+1) + ") > div:nth-child(3)")
    button.click()
0 голосов
/ 16 февраля 2020

Создайте list из всех кнопок и выполните итерации. Пожалуйста, попробуйте ниже код:

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

    buttons=WebDriverWait(browser,30).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "li.clickable_area > div:nth-child(3)")))
        for x in range(0,len(buttons)):
            if buttons[x].is_displayed():
                buttons[x].click()

ИЛИ

buttons=WebDriverWait(browser,30).until(EC.visibility_of_all_elements_located((By.XPATH, "//div[contains(text(), 'Button ')]")))
        for x in range(0,len(buttons)):
           button = WebDriverWait(driver, 50).until(EC.presence_of_element_located((By.XPATH, "//div[contains(text(), 'Button ')]")))
                   button.click()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...