Maison  >  Article  >  développement back-end  >  Comment gérer InvalidSelectorException avec \"span:contains(\'string\')\" dans Selenium Python Firefox ?

Comment gérer InvalidSelectorException avec \"span:contains(\'string\')\" dans Selenium Python Firefox ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-18 21:59:03509parcourir

How to Handle InvalidSelectorException with

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

Lors de l'utilisation de Selenium Python dans Firefox et de la tentative pour rechercher un élément à l'aide du sélecteur CSS "span:contains('Control panel')", l'erreur suivante est rencontrée :

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')"

Dans Selenium IDE, cette méthode localise avec succès l'élément. Cependant, en Python, cela échoue.

Cause première

Selon la spécification CSS, la pseudo-classe ":contains" n'est pas prise en charge par Firefox ou Chrome, même en dehors de WebDriver. Il était spécifique au moteur de sélection Sizzle utilisé dans Selenium 1.0. Cependant, WebDriver ne prend pas en charge les sélecteurs CSS de style Sizzle.

Solution

Au lieu de ":contains", utilisez des attributs ou des sélecteurs XPath :

  • Attributs :

    element = "span[attribute_name=attribute_value]"
  • XPath :

    • Utilisation text():

      element = my_driver.find_element_by_xpath("//span[text()='Control panel']")
    • Utilisation de contain():

      element = my_driver.find_element_by_xpath("//span[contains(.,'Control panel')]")
    • Utilisation de normalize-space():

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

Solution alternative

Utiliser jQuery :

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

Trivia

  • Les sélecteurs CSS ne sont pas non plus pris en charge par la console, mais jQuery les prend en charge via $('...'), qui remplace document.querySelector lorsque jQuery est présent sur la page.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn