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
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!