【问题标题】:How to count the number of elements which contains one or more identical class attributes using Selenium and Python?如何使用 Selenium 和 Python 计算包含一个或多个相同类属性的元素的数量?
【发布时间】:2018-08-22 10:41:48
【问题描述】:

在这段代码中,我如何计算full ng-scope 类?除了empty ng-scope

请帮忙。

【问题讨论】:

  • 你是怎么尝试的?分享更多问题详情
  • 欢迎来到 Stack Overflow!请阅读为什么a screenshot of code is a bad idea。粘贴代码并正确格式化它。还包括您尝试过的代码以及结果包括任何错误消息等。

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


【解决方案1】:

要计算特定类的元素数量,您可以这样做:

count = len(driver.find_elements_by_class_name('your_class_name'))

driver.find_elements 返回与特定定位器匹配的元素列表,因此该列表中的 len() 将是此类元素的数量。

在您的情况下,由于您的类名包含空格,因此最好使用 xpath :

count = len(driver.find_elements_by_xpath("//span[@class='full ng-scope']"))

在这段代码中,如何计算完整的 ng-scope 类?除了空的 ng-scope

上述定位器将与您传递的字符串定位器完全匹配,因此它只会搜索full ng-scope 而不是empty ng-scope

【讨论】:

  • 使用 CSS 选择器 span.full.ng-scope 实际上会更好。使用像这样的 XPath 定位器正在为 'full ng-scope' 进行字符串匹配,因此如果类改变了顺序或者如果在两者之间插入了另一个类,则 XPath 定位器将失败,而 CSS 选择器仍然可以工作。
【解决方案2】:

统计 class 属性为full ng-scope 的元素个数,可以使用以下解决方案:

  • 使用css_selector

    print(len(driver.find_elements_by_css_selector("div.star-point>span.total span.full.ng-scope")))
    
  • 使用xpath

    print(len(driver.find_elements_by_xpath("//div[@class='star-point']/span[@class='total']//span[@class='full ng-scope']")))
    

【讨论】:

    【解决方案3】:

    一个简单的 CSS 选择器

    span.full.ng-scope
    

    将在这里工作。它将匹配同时具有fullng-scope 类的所有SPANs,这将排除包含empty 类的任何元素。

    你想避免使用 XPath 之类的

    //span[@class='full ng-scope']
    

    因为它在类上做一个精确的字符串匹配 'full ng-scope' 所以如果添加一个新的 CSS 类,该定位器将失败。如果两个类名被交换,它将失败。在所有情况下,CSS 选择器仍然有效。这将减少您以后必须维护/更新定位器的机会。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-09
      • 2020-09-16
      • 2021-09-27
      • 2019-06-13
      • 2014-02-27
      • 2012-03-29
      • 2020-09-20
      • 1970-01-01
      相关资源
      最近更新 更多