2010-10-07 9 views
16

wiem jak uzyskać listę div z tego samego css klasy npJak zdobyć elementy HTML z wielu klas css

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

za pomocą XPath //div[@class='class1']

ale jak gdyby div mieć wiele klas, np.

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

Jaka będzie wówczas ścieżka x?

+0

Może byłoby lepiej użyć ścieżki CSS – Naramsim

Odpowiedz

47

Wyrażenie szukasz jest:

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

Gorąco sugerują XPath wizualizera, które można łatwo pomóc debugowania wyrażeń XPath. Można go znaleźć tutaj:

http://xpathvisualizer.codeplex.com/

+1

niewielki problem z tego rozwiązania jest to, że będzie to potencjalnie złamać, jeśli to możliwe nazwa klasy jest podciąg od drugiego. Na przykład, jeśli masz również „class11”, to będzie błędnie dopasować to, ponieważ zawiera „Class1”. Jest to bardzo łatwe do uniknięcia, choć, po prostu zrobić pewien, nazwy klasy nie zawierają siebie. – Flynn1179

+0

Zgoda, ale biorąc pod uwagę, co się omawiane są tutaj polega na skanowaniu wartość ciągu atrybutu jest w XPath mówić, nie jestem pewien, czy można go uniknąć. –

+3

Cóż, jeśli to naprawdę konieczne, można zrobić 'contains (concat („«@class,» «),» class1”)' itd., Ale jak powiedziałem, jest to bardzo proste, aby uniknąć potrzeby. – Flynn1179

-1

Jest przydatny pakiet python zwany cssselect. .

Od cssselect importu CSSSelector CSSSelector ('div.gallery') ścieżki

Generuje użytkowej XPath:

potomkiem albo self :: div [@class i zawiera (concat (” ' , normalizują-przestrzeń (@class), ' '),' galeria')]

jest bardzo podobna do odpowiedzi Flynn1179 użytkownika.