如果类名是数字,则无法按类名获取元素
Posted
技术标签:
【中文标题】如果类名是数字,则无法按类名获取元素【英文标题】: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
,我如何通过类名找到元素? (这是一个字符串)
【问题讨论】:
【参考方案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']")
【讨论】:
以上是关于如果类名是数字,则无法按类名获取元素的主要内容,如果未能解决你的问题,请参考以下文章