使用 Firefox 的 Selenium 中的“span:contains('string')”时出现无效的 SelectorException
尝试通过 CSS 定位元素时在带有 Firefox 的 Selenium Python 选择器中,“span:contains('Control panel')”表达式可能会遇到InvalidSelectorException 并显示消息“给定 CSS 选择器表达式 'span:contains('Control panel')' 无效。”
如 GitHub issues #987 和 #1547 中所述,不支持 :contains 伪类在 CSS 规范中,因此 Firefox 无法识别。这个伪类是 Selenium 1.0 中使用的 Sizzle 选择器引擎的一部分,但 WebDriver 不支持 Sizzle 风格的 CSS 选择器。
对于本身不支持 CSS 选择器的浏览器(例如 IE7 和 IE8), :contains 可能仍然有效,导致不同浏览器之间的不一致。更可靠的方法是使用 span 标签的另一个属性,例如:
element = "span[attribute_name=attribute_value]"
替代解决方案:
如果预期元素是一个带有文本“控制面板”,您可以根据流行的 DOM 使用以下 XPath 表达式之一树:
使用 text():
element = my_driver.find_element_by_xpath("//span[text()='Control panel']")
使用contains():
element = my_driver.find_element_by_xpath("//span[contains(.,'Control panel')]")
使用标准化空间():
element = my_driver.find_element_by_xpath("//span[normalize-space()='Control panel']")
使用jQuery:
jQuery 还支持 :contains 伪类,允许您使用以下表达式:
$('span:contains("Control panel")')
附加说明:
请记住,浏览器控制台本身不支持 CSS 选择器,但 jQuery 通过 $('...') 支持它们快捷方式,通常会覆盖默认的 document.querySelector 方法。
以上是为什么'span:contains('string')”在 Firefox 中的 Selenium 中失败,如何修复?的详细内容。更多信息请关注PHP中文网其他相关文章!