Selenium python find_element_by_class_name () a cessé de fonctionner de la version 2.2 à la version 2.21 - ne peut pas utiliser le 'Nom de la classe composée'
Je suis à l'aide de Sélénium bibliothèque python pour recueillir des données à partir d'une page html dans le navigateur Firefox.
J'ai eu à mettre à jour à partir de Sélénium 2.0 à 2.21 parce que le serveur a mis à jour Firefox.
En v 2.21 appels à find_element_by_class_name("grid-cell-inner grid-col-name")
échoue avec:
selenium.common.exceptions.WebDriverException: Message: u'Compound class names not permitted'
Le nom de la classe de l'élément que j'essaie d'accès est grid-cell-inner grid-col-name
L'appel à find_element_by_class_name()
travaillé en v 2.2, donc la logique est correcte, et les données utilisées pour être trouvé sur OK. Quelque chose a changé en v 2.21.
Tous les Sélénium exemples de donner des exemples simples avec un nom de classe foo
etc, et aucun avec le type de nom, j'ai besoin d'accéder.
Pourquoi le Sélénium arrêter de soutenir de trouver des classes avec des noms comme grid-cell inner grid-col-name
et ce qu'il leur solution?
Quelqu'un peut-il m'aider à trouver des éléments avec un "composé" les noms de classe?
Grâce.
source d'informationauteur Robert Hector
Vous devez vous connecter pour publier un commentaire.
Le problème au sujet de WebDriver est qu'il évolue toujours. Beaucoup. Personnellement, je ne sais pas sur une version qui a soutenu la recherche par le nombre de classes en une seule commande, si elle doit avoir été assez vieux :).
La recherche par un Sélecteur CSS devrait fonctionner, cependant:
Je ne recommandent pas l'utilisation de XPath pour cette chose en particulier, parce que ces deux expressions suivantes sont une chose différente:
//*[class='grid-cell-inner grid-col-name']
//*[class='grid-col-name grid-cell-inner']
Vous devez utiliser un CssSelector dans le format ".nameA.nameB.nameC" vous pouvez en avoir autant que vous le souhaitez, il suffit d'ajouter le "."
Sinon, vous pouvez correspondre à l'ensemble de l'attribut (vous pouvez aussi le faire avec xpath): "[class='exacte du nom de la classe']"
XPath - "//[@class='exacte du nom de la classe']"
Il y a des façons de le faire commence avec ou se termine avec ou contient trop (en CSS et xpath) qui permet, si les classes sont générées dynamiquement.
Sélénium n'a pas soutenu composé des noms de classe pour un temps très long, j'ai pensé.
Inutile de dire, essayer via XPath ou sélecteur CSS ou par le nom de classe "de la grille de la cellule intérieure", puis filtrage de voir quels sont les éléments qui ont la classe de "grille de cellules de grille intérieure-col-nom".
essayez aussi: