Выбор элемента с селеном python - PullRequest
0 голосов
/ 30 марта 2020

Нам нужно нажать от 1 до 50 соответственно

числовых элементов:

1 - <span class="box" style="z-index:99"></span>
2 - <span class="box" style="z-index:98"></span>
3 - <span class="box" style="z-index:97"></span>
4 - <span class="box" style="z-index:96"></span>
5 - <span class="box" style="z-index:95"></span>
6 - <span class="box" style="z-index:94"></span>
7 - <span class="box" style="z-index:93"></span>
8 - <span class="box" style="z-index:92"></span>
My Code :

import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("http://zzzscore.com/1to50/en/?ts=1585514800920")

time.sleep(2)

element_list = driver.find_element_by_css_selector("[style^=index]")

i = 99
while i > 50:
    element_list[i].click()

Я хочу, чтобы код нажмите цифры от 1 до 50 соответственно. Вы можете видеть элементы чисел во вложении, я хочу использовать шаблон (индекс 99 в элементе 1, индекс 98 в элементе 2 ...) между элементами, но я не смог ' т

1 Ответ

1 голос
/ 30 марта 2020

В вашем коде 3 проблемы.

  1. find_element_by_css_selector возвращает один элемент, а не список. Таким образом, вы не сможете перебирать элементы. Чтобы выбрать несколько элементов, используйте форму множественного числа, например: find_elements_by_css_selector
  2. предоставленный селектор css недействителен
  3. , похоже, вы предполагаете, что получите веб-элементы, отсортированные по z -index, что не так

Я рекомендую изучать Xpath, он лучше и полезнее селекторов css (вы можете использовать его позже, когда у вас будет возможность проанализировать XML). Но даже Xpath не будет сортировать элементы по значениям атрибутов, таким как z-index.

Что вы можете сделать, однако:

  1. выяснить, сколько элементов нужно щелкнуть
  2. в цикле итерации цикла for от 1 до желаемого максимума
  3. внутри цикла for создает динамический c xpath через f-строку, чтобы найти ваш элемент:
    • div, который содержит число, которое вы хотите щелкнуть как текст div[text()="{i}"]
    • , и у рассматриваемого div есть диапазон, который имеет класс блока span[@class="box"]

Таким образом, в основном elem = driver.find_element_by_xpath(f'//*[text()="{i}"]/span[@class="box"]') должно быть ключом для вашей задачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...