按特定类名选择元素

Posted

技术标签:

【中文标题】按特定类名选择元素【英文标题】:Selecting elements by specific Class Name 【发布时间】:2018-04-05 02:38:21 【问题描述】:

我想按类名选择元素,但只能使用特定名称(first-level-li),如果有其他类具有我要选择的名称但随后是其他名称

(<li class="first-level-li no-second-level shop-link">
<li class="first-level-li  no-second-level  ">)

,我需要忽略它们,我该怎么做? 示例:

firstLevelMenu = self.driver.find_elements_by_class_name ( "first-level-li" )

网站

<li class="first-level-li no-second-level shop-link">
<li class="first-level-li  no-second-level  ">
<li class="first-level-li  ">

【问题讨论】:

你可以用 xpath 选择 很遗憾,使用 by xpath (find_elements_by_xpath) 没有返回任何元素,页面中有 9 个元素。你知道原因吗? 打印 len(firstLevelMenu) 网址是什么? @SDB 在您提供的示例 html 中,类名后面有 2 个空格。因此,要匹配的 xpath 实际上将带有 2 个空格(“//li[@class='first-level-li']”)。它必须完全匹配 【参考方案1】:
firstlevelMenu = self.driver.find_elements_by_xpath("//li[@class='first-level-li  ']")

文档在这里http://selenium-python.readthedocs.io/locating-elements.html

【讨论】:

很遗憾,使用 by xpath (find_elements_by_xpath) 没有返回任何元素,页面中有 9 个元素。你知道原因吗?【参考方案2】:

你可以使用 xpath 来做同样的事情:

self.driver.find_elements_by_xpath("//li[@class='first-level-li']")

这会找到具有确切类名的元素。

【讨论】:

【参考方案3】:

你也可以使用上面提到的xpath和下面的函数,它会直接返回特定元素的对象,而不是列表。

self.driver.find_element_by_xpath("//li[@class='first-level-li ']")

【讨论】:

以上是关于按特定类名选择元素的主要内容,如果未能解决你的问题,请参考以下文章

按类名收集元素,然后单击每个元素 - Puppeteer

JQuery选择器

webdriver 第二次没有按类名定位元素

js选择器

如何在 CSS 选择器中排除特定的类名?

使用 jquery 按特定模式选择元素