You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Selenium使用CSS_SELECTOR时无法调用:contains()伪类咨询

问题核心原因

Chrome控制台里能运行的:contains()不是W3C标准规定的CSS伪类,是jQuery框架自行实现的扩展语法。Selenium调用的是浏览器原生的CSS选择器解析能力,本身不支持这种非标准的扩展语法,所以不管你怎么转义冒号都会触发非法选择器报错,和你的写法转义逻辑无关。

可行解决方案

方案1:改用XPATH选择器(最推荐)

XPATH本身原生支持文本匹配逻辑,完全可以实现和:contains()完全一致的效果,对应你的需求写法如下:

# 模糊匹配包含指定文本的.btn元素
presence = EC.presence_of_element_located((By.XPATH, "//*[contains(@class, 'btn') and contains(text(), 'Continue Shopping')]"))

# 如果需要完全匹配文本、忽略前后空格,可以用normalize-space处理
presence = EC.presence_of_element_located((By.XPATH, "//*[contains(@class, 'btn') and normalize-space(text()) = 'Continue Shopping']"))

方案2:执行JavaScript代码查找元素

如果页面已经引入了jQuery,可以直接执行和控制台一致的jQuery代码获取元素:

# 执行jQuery代码拿到元素
element = driver.execute_script("return $('.btn:contains(\"Continue Shopping\")')[0];")

如果页面没有引入jQuery,也可以用原生JS实现文本过滤:

element = driver.execute_script("""
  return Array.from(document.querySelectorAll('.btn')).find(el => el.textContent.includes('Continue Shopping'));
""")

内容的提问来源于stack exchange,提问作者Athena Wisdom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 05:27:00