我想要的
<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”。