61 votes

Comment obtenir des éléments html avec plusieurs classes css

Je sais comment obtenir une liste de DIV de la même classe CSS, par exemple

 <div class="class1">1</div>
<div class="class1">2</div>

en utilisant xpath //div[@class='class1']

Mais comment faire si un div a plusieurs classes, par exemple

 <div class="class1 class2">1</div>

À quoi ressemblera le xpath alors?

125voto

Ioannis Karadimas Points 3911

L'expression que vous recherchez est :

 //div[contains(@class, 'class1') and contains(@class, 'class2')]

Je suggère fortement le visualiseur XPath, qui peut vous aider à déboguer facilement les expressions xpath. Il peut être trouvé ici:

http://xpathvisualizer.codeplex.com/

6voto

Selon cette réponse , qui explique pourquoi il est important de s'assurer que les sous-chaînes du nom de classe que l'on recherche ne sont pas incluses, la bonne réponse devrait être :

 //div[contains(concat(' ', normalize-space(@class), ' '), ' class1 ')
    and contains(concat(' ', normalize-space(@class), ' '), ' class2 ')]

2voto

steveayre Points 189

Il existe un package python utile appelé cssselect.

à partir de cssselect importer CSSSelector CSSSelector('div.gallery').path

Génère un XPath utilisable :

 descendant-or-self::div[@class and contains(concat(' ', normalize-space(@class), ' '), ' gallery ')]

C'est très similaire à la réponse de Flynn1179.

0voto

rishi singh Points 9

je pense que c'est l'expression que tu cherches

 //div[starts-with(@class, "class1")]/text()

0voto

HelpNeeder Points 3069

Tu pourrais aussi faire :

 //div[contains-token(@class, 'class_one') and contains-token(@class, 'class_two')]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X