首页 > 编程问答 >如何在 Selenium 的 find_elements 中仅排除某些子元素类

如何在 Selenium 的 find_elements 中仅排除某些子元素类

时间:2024-07-21 14:46:58浏览次数:13  
标签:python css selenium-webdriver

我想要的

<div class="first second">
  <p>get text</p>
</div>
<div class="first second third">
  <p>not get text</p>
</div>

对于上面类定义的html,我想使用selenium的find_elements css选择器仅获取 "get text" in <p> of class=“first second” 中的文本

和css选择器。 not get text 不获取文本|| |in <p> of class=“first second third” .

出现的问题

以下代码同时输出 get text not get text 我怎样才能只得到 get text

elements = driver.find_elements(By.CSS_SELECTOR, ".first.second :not(.third)")
for element in elements:
  print(element.text)

你的 CSS 选择器有问题。 :not(.third) 应用于 .first.second 内部 的元素,而不是 .first.second 本身。

你需要更具体地说明你的 CSS 选择器来只定位你想要的 div 元素:

elements = driver.find_elements(By.CSS_SELECTOR, "div.first.second:not(.third) > p")
for element in elements:
  print(element.text)

这个选择器会这样做:

  • div.first.second : 选择所有同时具有 first second 类的 div 元素。
  • :not(.third) : 从之前的选择中排除任何具有 third 类的元素。
  • > p : 选择作为之前选择结果直接子元素的 p 元素。

通过这种组合,你只会选择具有 first second 类,但没有 third 类的 div 元素内的 p 元素,从而得到你想要的文本“get text”。

标签:python,css,selenium-webdriver
From: 78774548

相关文章