Le sélénium Python: find_element_by_css_selector() à l'aide de :contains()
En Sélénium sur Python, je suis en train de sélectionner un élément à l'aide de
driver = webdriver.Firefox()
driver.find_element_by_css_selector("td:contains('hello world')")
Qui me donne l'erreur:
>>>> selenium.common.exceptions.WebDriverException: Message: u'An invalid or illegal string was specified'
Je peux sélectionner des éléments à l'aide de beaucoup de différents sélecteurs CSS de cette façon, mais en utilisant :contains() semble toujours jeter une erreur. NOTE: je reçois le même message d'erreur lorsque j'essaie d'utiliser:
driver.find_element_by_xpath("//td[contains(text(),'hello world')]")
Veuillez en informer. Merci!
EDIT: RÉSOLU!
Problème résolu! Je vous remercie beaucoup pour votre aide! J'ai eu deux erreurs importantes:
1.) J'ai pensé que :contains() a été accepté sélecteur de css3 (il s'avère qu'elle n'est pas partie de la spec actuelle, c'est pourquoi je ne pouvais pas sélectionner cette façon)
2.) Le xpath sélecteur aurait été bien sauf que j'ai été en utilisant un analyseur qui suppose xpath n'aurait jamais d'espace, de sorte qu'il s'est déchiré les arguments par des espaces. Donc, quand j'ai passé le xpath sélecteur de
//td[contains(text(),'hello world']
l'analyseur a été tronquée à l'espace après le "bonjour" de sorte que le xpath sélecteur ressemblait
//td[contains(text(),'hello
clairement jeter une erreur. J'ai donc besoin d'ajuster mon analyse de lire correctement mon selector xpath.
Merci encore pour tous vos rapide, des réponses utiles!
- nous montrer le contenu html s'il vous plaît..
- Sélecteurs CSS ne pas avoir nommé comme
contains
.. cssselect
a un support pour:contains()
pseudo-sélecteur, mais il se réfère à un début de CSS3 projet qui a été supprimé (pythonhosted.org/cssselect/#supported-selectors). Je ne suis pas au courant d'autres projets à l'appui de cette pseuso-sélecteur- c'est jQery un api.jquery.com/contains-selector . Le sélénium ne supporte pas que jQuery un..
- le
contains
sélecteur jQuery a vient de Grésillement, pas jQuery. - La prochaine fois, s'il vous plaît montrer le code réel!
- J'aurais aimé montrer le vrai code, mais les abstractions a obtenu de la manière trop. Il était environ 200 lignes de code qui ont été impliquées dans l'obtention de la chaîne à partir de la première page à l'endroit où le sélénium a été de l'utiliser. Il aurait eu l'air très encombré.
- ensuite, vous devez faire une simple reproductible scénario. Comment en étions-nous de savoir qu'il était arriver tronquée? Vous n'avez pas à nous fournir la réelle XPath vous avez été en cours d'exécution.
Vous devez vous connecter pour publier un commentaire.
Remplacer
find_element_by_xpath_selector
avecfind_element_by_xpath
(Il n'y a pas defind_element_by_xpath_selector
méthode):EXEMPLE COMPLET
br.find_element_by_xpath(u"//td[contains(text(), 'hello')]")
? qu'est-ce quebr
?br
vient de mon pic solution. Merci pour les commentaires.driver.find_element_by_xpath(u"//td
? qu'est-ce queu
?Vous faites le mauvais sens. Vous devez d'abord créer un objet de pilote en tant que ci-dessous:
Ensuite, accédez à l'url voulue comme ci-dessous:
Alors
driver
objet nécessaire d'appeler la méthode requise. Il n'y a pas de contientSélecteurs CSS
. Vous pouvez aller de l'avant par cette méthodefind_element_by_xpath
comme ci-dessous :Au lieu de
vous pouvez utiliser cette option:
Remarque: * dans css_selector œuvres mêmes que celles contenues dans XPath
De référence:
https://saucelabs.com/resources/articles/selenium-tips-css-selectors
*=
(comme^=
et$=
) est utilisé pour sélectionner les ATTRIBUTS des éléments, et non PAS le TEXTE INTERNE de ces éléments.