ホームページ  >  記事  >  バックエンド開発  >  Selenium Python Firefox で「span:contains(\'string\')」を使用して InvalidSelectorException を処理する方法

Selenium Python Firefox で「span:contains(\'string\')」を使用して InvalidSelectorException を処理する方法

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-18 21:59:03510ブラウズ

How to Handle InvalidSelectorException with

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

Firefox で Selenium Python を使用して試行した場合CSS セレクター「span:contains('コントロール パネル')」を使用して要素を検索すると、次のエラーが発生します:

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 仕様によると、「:contains」疑似クラスは Firefox または Chrome ではサポートされていません。 WebDriver の外でも。これは、Selenium 1.0 で使用されていた Sizzle Selector Engine に固有のものでした。ただし、WebDriver は Sizzle スタイルの CSS セレクターをサポートしていません。

解決策

「:contains」の代わりに、属性または XPath セレクターを使用します:

  • 属性:

    element = "span[attribute_name=attribute_value]"
  • 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')]")
    • normalize-space() の使用:

      element = my_driver.find_element_by_xpath("//span[normalize-space()='Control panel']")

代替ソリューション

jQuery を使用する:

$('span:contains("Control panel")')

トリビア

  • CSS セレクターはコンソールでもサポートされていませんが、jQuery は、ページに jQuery が存在する場合に document.querySelector をオーバーライドする $('...') を通じて CSS セレクターをサポートします。

以上がSelenium Python Firefox で「span:contains(\'string\')」を使用して InvalidSelectorException を処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。