【问题标题】:Can´t get element by class name if class name is a number如果类名是数字,则无法按类名获取元素
【发布时间】:2015-11-04 00:26:05
【问题描述】:

我尝试使用以下代码按类名查找元素:

result.find_element_by_class_name("0")

result 是一个 WebElement,其中包含我正在寻找的元素。 (我很确定)

html-code 是:

<tr class="0"></tr>

但如果我这样做,我会收到以下错误:

selenium.common.exceptions.InvalidSelectorException:消息:给定的选择器 0 无效或不会生成 WebElement。出现以下错误:

InvalidSelectorError:指定了无效或非法的类名

result 内还有其他 WebElements,我可以通过类名找到它们(例如,有一个名为 last 的元素,如果我尝试获取它,它会起作用)

那么,如果类名是Number,我如何通过类名找到元素? (这是一个字符串)

【问题讨论】:

    标签: python selenium selenium-webdriver css-selectors


    【解决方案1】:

    find_element_by_class_name() 在后台使用 CSS 选择器 (source):

    if by == By.ID:
        by = By.CSS_SELECTOR
        value = '[id="%s"]' % value
    elif by == By.TAG_NAME:
        by = By.CSS_SELECTOR
    elif by == By.CLASS_NAME:  # < HERE
        by = By.CSS_SELECTOR
        value = ".%s" % value
    elif by == By.NAME:
        by = By.CSS_SELECTOR
        value = '[name="%s"]' % value
    

    而且,问题是,根据CSS grammar,“0”不是有效的类名,因为名称必须以下划线(_)、连字符(-)或字母(@987654323)开头@)。在这种情况下,您可以通过 XPath 定位元素:

    result.find_element_by_xpath("//tr[@class='0']") 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-29
      • 2020-10-30
      • 1970-01-01
      • 2020-03-05
      相关资源
      最近更新 更多