Python Selenium click on all <a> in <div>

Помогите разобраться.

На этом скрине, по css селектору находит 24 нода. Мне нужно кликнуть на каждый по очереди.

Пытался так:

    li = driver.find_elements_by_css_selector('div.crop-filters.ng-scope .btn')
    for x in range(24, len(li)):
          if li[x].is_displayed():
              li[x].click()

Потом так:

items = driver.find_elements_by_css_selector("crop-filters.ng-scope a.btn")
       for item in items:
         item.click()

В этом примере кликает на все элементы, почти, одновременно
Подскажите решении

Решил… может пригодиться новичкам

 li = driver.find_elements_by_css_selector('div.crop-filters.ng-scope .btn')
        li2 = li[1:50]
        for x in range(len(li2)):
            if li2[x].is_displayed():
                ActionChains(driver).move_to_element(li2[x]).click().perform()
                time.sleep(1)

Не дай бог на такое новичкам смотреть! :disappointed_relieved:
По пунктам:

  1. li2 = li[1:50] - что это за срез списка такой? По любому есть варианты составить более подходящий локатор для поиска ссылок
  2. for x in range(len(li2)) - может лучше так?
for el in li2:
    if el.is_displayed():
    ....

3, Использование ActionChains в таких простых ситуациях смысла особого не имеет. А скорость теста и надежность явно будет ниже.
4. time.sleep(1) - за такое расстрел сразу. Но иногда действительно не обойтись.

Я сам новичок и глаза у меня не выпали))

И как это должно выглядеть?

1 лайк

Как-то так:

a_list = driver.find_elements_by_css_selector('another_locator')
for a in a_list:
    if a.is_displayed():
        a.click()
1 лайк

как-то так не работало. Так и знал что совет будет “как-то так” ))

Советую ознакомиться с основами питона/итераторов прежде чем писать нечто подобное.
Это даже не смешно, за “нацию” обидно…