选择具有相同名称的不同Web元素

时间:2020-01-30 21:06:20

标签: python-3.x selenium beautifulsoup

我正在尝试将selenium与python一起使用以通过轮播上的不同选项卡(按钮?),以便可以从每个选项卡中收集数据,但是问题是我需要使用的webelement的名称相同每个标签(按钮)。

我可以使用.child查找以下html代码并获取列表,但我不知道如何使用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 个答案:

答案 0 :(得分:2)

要获取元素列表,请使用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 :(得分:1)

您可以在文本帮助下单击。

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

您也可以点击足球网球

OR

尽管您也可以使用获取元素列表并单击来进行迭代

tabs=driver.find_elements_by_class_name("rj-carousel-item__sportName")
for tab in tabs:
    tab.click()

答案 2 :(得分:1)

要遍历调用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")

答案 3 :(得分:0)

使用CSS即可 div.rj-carousel-item:nth-​​of-type(2)

相关问题