如何在 Selenium Python Firefox 中使用「span:contains(\'string\')\」處理 InvalidSelectorException?

Mary-Kate Olsen
發布: 2024-10-18 21:59:03
原創
635 人瀏覽過

How to Handle InvalidSelectorException with

Selenium.common.exceptions.InvalidSelectorException with "span:contains('string')"

在Firefox 中嘗試使用Selenformium時使用CSS 選擇器「span:contains('Control panel')」尋找元素,會遇到以下錯誤:

selenium.common.exceptions.InvalidSelectorException: Message: Given css selector expression "span:contains('Control panel')" is invalid: InvalidSelectorError: 'span:contains('Control panel')' is not a valid selector: "span:contains('Control panel')"
登入後複製

在Selenium IDE 中,此方法成功定位元素。然而,在 Python 中,它失敗了。

根本原因

根據 CSS 規範,Firefox 或 Chrome 不支援「:contains」偽類,即使在 WebDriver 之外。它特定於 Selenium 1.0 中使用的 Sizzle 選擇器引擎。但是,WebDriver 不支援 Sizzle 風格的 CSS 選擇器。

解決方案

使用屬性或XPath 選擇器來取代「:contains」:

  • 屬性:

    element = "span[attribute_name=attribute_value]"
    登入後複製
  • XPath:

    • 使用text():

      element = my_driver.find_element_by_xpath("//span[text()='Control panel']")
      登入後複製
    • 使用text():

      element = my_driver.find_element_by_xpath("//span[contains(.,'Control panel')]")
      登入後複製
    • 使用contains():

      element = my_driver.find_element_by_xpath("//span[normalize-space()='Control panel']")
      登入後複製
    使用normalize-space():

$('span:contains("Control panel")')
登入後複製

替代解決方案

    使用jQuery:
瑣事 瑣事 瑣事 瑣事 瑣事

以上是如何在 Selenium Python Firefox 中使用「span:contains(\'string\')\」處理 InvalidSelectorException?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板