Selenium/Python无法在CSS_SELECTOR中使用":contains()"



当我尝试在Selenium的By.CSS_SELECTOR中使用:contains时,例如

presence = EC.presence_of_element_located((By.CSS_SELECTOR, ".btn:contains('Continue Shopping')"))

presence = EC.presence_of_element_located((By.CSS_SELECTOR, ".btn:contains('Continue Shopping')"))

presence = EC.presence_of_element_located((By.CSS_SELECTOR, ".btn\:contains('Continue Shopping')"))

Python程序崩溃,出现错误

Exception: Message: invalid selector: An invalid or illegal selector was specified
(Session info: chrome=95.0.4638.54)

在硒中使用:contains可能吗?CSS选择器

$('.btn:contains("Continue Shopping")')

在Chrome的JS控制台中运行良好。

在Ubuntu 20.04上使用Chrome 95.0.4638.54、ChromeDriver 95.0.4638.5 4、Python 3.10。

选择器:contains('text')是一个jQuery选择器,而不是Selenium所期望的有效CSS选择器。我假设它通过Chrome的DevTools控制台在页面上工作的原因是因为页面上定义了jQuery

不幸的是,我不相信您可以使用CSS选择器(链接(通过其文本直接选择元素。

据我所见,你有两个选择:

  1. 将选择器更改为基于类或ID(最简单(
  2. 创建一个Selenium实用程序来运行使用这个jQuery选择器的JS脚本;例如execute_script("jQuery(" + id + ":contains('" + text + "')", id, text)

如Aspok所述,您的CSS定位器不是有效的CSS定位器
要根据文本定位元素,可以使用XPath定位器,例如:

//*[contains(@class,'btn') and(contains(text(),'Continue Shopping'))]

如果btn是该元素的唯一类名属性,那么XPath可以是

//*[@class='btn' and(contains(text(),'Continue Shopping'))]

正如@aspok所解释的,它不是一个有效的css选择器。

如果您希望具有相同的XPath,并且.btn是类并且具有文本/部分文本

Continue Shopping 

您可以尝试以下XPath:

//*[contains(text(),'Continue Shopping')]

//*[contains(text(), 'Continue Shopping') and contains(@class, 'btn')]

如果我们在HTML DOM中是否有唯一条目,请检查dev tools(Google chrome(。

您应该检查的xpath:

//*[contains(text(), 'Continue Shopping') and contains(@class, 'btn')]

检查步骤:

Press F12 in Chrome->转到element部分->进行CTRL + F->然后粘贴xpath,看看您想要的element是否通过1/1匹配节点突出显示。

此外,只要让您知道,如果您发现多个匹配节点//*可以替换为tag name

相关内容

  • 没有找到相关文章

最新更新