【问题标题】:How to find elements that do not include a certain class name with selenium and python如何使用 selenium 和 python 查找不包含某个类名的元素
【发布时间】:2019-06-13 11:45:02
【问题描述】:

我想查找所有包含某个类名的元素,但跳过那些在我正在搜索的元素旁边还包含另一个类名的元素

我有元素 <div class="examplenameA"> 和元素 <div class="examplenameA examplenameB">

目前我这样做是为了解决我的问题:

items = driver.find_elements_by_class_name('examplenameA')
for item in items:
    cname = item.get_attribute('class')
    if 'examplenameB' in cname:
        pass
    else:
        rest of code

我只想要类名称为 examplenameA 的元素,我想跳过也包含 examplenameB 的元素

【问题讨论】:

    标签: python-3.x selenium selenium-webdriver xpath css-selectors


    【解决方案1】:

    查找所有具有 class attributeexamplenameA 的元素,省略具有 class 的元素 attribute 为 examplenameB 可以使用以下解决方案:

    • css_selector:

      items = driver.find_elements_by_css_selector("div.examplenameA:not(.examplenameB)")
      
    • xpath

      items = driver.find_element_by_xpath("//div[contains(@class, 'examplenameA') and not(@class='examplenameB')]")
      

    【讨论】:

      【解决方案2】:

      在这种情况下,您可以使用 xpath。因此,根据您的示例,您需要使用driver.find_elements_by_xpath('//div[@class='examplenameA') 之类的东西。这将只为您提供类为 examplenameA

      的元素

      xpath 的工作原理是:Xpath=//tagname[@attribute='value']

      因此类被视为属性 & xpath 将尝试匹配确切的给定值,在这种情况下 examplenameA,因此 <div class="examplenameA examplenameB"> 将被忽略

      如果是find_elements_by_class_name method,它会尝试匹配类为examplenameA的元素,所以<div class="examplenameA examplenameB">也会被匹配

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-24
        • 1970-01-01
        • 2018-08-29
        • 1970-01-01
        • 2021-09-20
        • 2020-09-05
        • 2018-06-30
        • 2020-02-12
        相关资源
        最近更新 更多