Maison > développement back-end > Tutoriel Python > 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
Libérer: 2024-10-18 21:59:03
original
640 Les gens l'ont consulté

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')"
Copier après la connexion

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]"
    Copier après la connexion
  • XPath :

    • Utilisation text():

      element = my_driver.find_element_by_xpath("//span[text()='Control panel']")
      Copier après la connexion
    • Utilisation de contain():

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

      element = my_driver.find_element_by_xpath("//span[normalize-space()='Control panel']")
      Copier après la connexion

Solution alternative

Utiliser jQuery :

$('span:contains("Control panel")')
Copier après la connexion

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!

source:php
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal