Выбор разных веб-элементов с одинаковым именем - PullRequest
0 голосов
/ 31 января 2020

Я пытаюсь использовать селен с python до go через разные вкладки (кнопки?) На карусели, чтобы я мог собирать данные с каждой из них, но проблема в том, что мне нужно использовать одно и то же имя для каждой вкладки (кнопки).

Я могу найти следующий html код, используя .child и получить список, но я не знаю, как это сделать с Selenium.

[<div class="rj-carousel-item" data-uat="carousel-item-sport"><span class="icon i-o-sport-2 i-32"></span><div class="rj-carousel-item__details"><div class="rj-carousel-item__sportName" data-uat="carousel-item-sportName">Basketball</div><div class="rj-carousel-item__eventsCount" data-uat="carousel-item-eventsCount">14</div></div></div>,
 <div class="rj-carousel-item" data-uat="carousel-item-sport"><span class="icon i-o-sport-8 i-32"></span><div class="rj-carousel-item__details"><div class="rj-carousel-item__sportName" data-uat="carousel-item-sportName">Ice Hockey</div><div class="rj-carousel-item__eventsCount" data-uat="carousel-item-eventsCount">10</div></div></div>,
 <div class="rj-carousel-item" data-uat="carousel-item-sport"><span class="icon i-o-sport-1 i-32"></span><div class="rj-carousel-item__details"><div class="rj-carousel-item__sportName" data-uat="carousel-item-sportName">Soccer</div><div class="rj-carousel-item__eventsCount" data-uat="carousel-item-eventsCount">11</div></div></div>,
 <div class="rj-carousel-item" data-uat="carousel-item-sport"><span class="icon i-o-sport-6 i-32"></span><div class="rj-carousel-item__details"><div class="rj-carousel-item__sportName" data-uat="carousel-item-sportName">Tennis</div><div class="rj-carousel-item__eventsCount" data-uat="carousel-item-eventsCount">14</div></div></div>

Теперь, если я использую

new_tab = driver.find_element_by_class_name('rj-carousel-item')
new_tab.click()

Тогда я могу получить доступ к первой вкладке, но я не знаю, как добраться до остальных. Опять же, я предполагаю, что это связано с составлением списка из них, но я не могу понять, как

Ответы [ 4 ]

2 голосов
/ 31 января 2020

Чтобы получить список элементов Используйте find_elements, который возвращает список, а затем вы можете выполнить итерацию.

Использовать find_elements_by_class_name():

listoftab=driver.find_elements_by_class_name("rj-carousel-item")
for new_tab in listoftab:
    new_tab.click()

Или find_elements_by_css_selector():

listoftab=driver.find_elements_by_css_selector(".rj-carousel-item")
for new_tab in listoftab:
    new_tab.click()
1 голос
/ 31 января 2020

К go через различные вкладки, вызывая click(), вы можете написать метод следующим образом:

def click_me(myString):
        driver.find_element_by_xpath("//div[@class='rj-carousel-item']//div[@class='rj-carousel-item__sportName'][.='" + myString + "']").click()

Теперь вы можете вызывать метод из основного метода следующим образом:

click_me("Basketball")
click_me("Ice Hockey")
click_me("Soccer")
click_me("Tennis")
1 голос
/ 31 января 2020

Вы можете нажать с помощью текста.

tab = driver.find_element_by_xpath("//div[.='Basketball'])
tab.click()

Точно так же вы можете нажать на футбол и теннис тоже.

ИЛИ

Хотя вы можете использовать также получить список элементов и повторить его, нажав

tabs=driver.find_elements_by_class_name("rj-carousel-item__sportName")
for tab in tabs:
    tab.click()
0 голосов
/ 01 февраля 2020

Используя CSS, вы можете сделать div.rj-carousel-item: nth-of-type (2)

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