XPath :: Holen Sie sich folgende Geschwister


82

Ich habe folgende HTML-Struktur: Ich versuche, eine robuste Methode zum Extrahieren des zweiten Farbverdauungselements zu erstellen, da es viele dieser Tags im DOM geben wird.

<table>
  <tbody>
    <tr bgcolor="#AAAAAA">
    <tr>
    <tr>
    <tr>
    <tr>
      <td>Color Digest </td>
      <td>AgArAQICGQMVBBwTIRQHIwg0GUMURAZTBWQJcwV0AoEDAQ </td>
    </tr>
    <tr>
      <td>Color Digest </td>
      <td>2,43,2,25,21,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,33,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, </td>
    </tr>
  </tbody>
</table>

Ich versuche, das zweite td-Element "Color Digest" zu extrahieren, das den dekodierten Wert hat.

Ich habe den folgenden xpath geschrieben, aber anstatt den zweiten zu bekommen, bekomme ich nicht das zweite td-Element.

//td[text() = ' Color Digest ']/following-sibling::td[2]

Und wenn ich es in td [2] in td [1] ändere, bekomme ich beide Elemente.

Antworten:


120

Sie sollten nach dem zweiten tr suchen, dessen td gleich 'Color Digest' ist, dann müssen Sie entweder das folgende Geschwister des ersten td im tr oder das zweite td betrachten.

Versuche Folgendes:

//tr[td='Color Digest'][2]/td/following-sibling::td[1]

oder

//tr[td='Color Digest'][2]/td[2]

http://www.xpathtester.com/saved/76bb0bca-1896-43b7-8312-54f924a98a89


Ich benutze Xpath Checker auf Firefox
Add-Semikolons


1
Vielleicht funktioniert der Xpath Checker nicht? Ich habe es nie benutzt und habe kein Firefox installiert. Der xpath, den ich habe, sollte nur das zweite td-Element zurückgeben, wenn das erste td-Element 'Color Digest' hat
james31rock

Wenn Sie meinen HTML-Code überprüfen, gibt es ein Leerzeichen "Color Digest". Ich habe den von Ihnen gesendeten Link ausprobiert und Sie können sehen, dass beide TD zurückgegeben werden.
Add-Semikolons

1
Ahh ich verstehe, ich werde meine Antwort ändern. Es tut uns leid. Sie sollten nach dem zweiten tr suchen, dessen td gleich 'Color Digest' ist, dann müssen Sie entweder das folgende Geschwister des ersten td im tr oder das zweite td betrachten.
James31 Rock

5

Sie können eine Liste von Elementen mit xPath identifizieren:

//td[text() = ' Color Digest ']/following-sibling::td[1]

Dies gibt Ihnen eine Liste von zwei Elementen, als Sie das 2. Element als Ihr beabsichtigtes verwenden können. Zum Beispiel:

List<WebElement> elements = driver.findElements(By.xpath("//td[text() = ' Color Digest ']/following-sibling::td[1]"))

Jetzt können Sie das 2. Element als beabsichtigtes Element verwenden, nämlich elements.get (1).


2

/html/body/table/tbody/tr[9]/td[1]

In Chrome (möglicherweise auch in Safari) können Sie ein Element untersuchen, dann mit der rechten Maustaste auf das Tag klicken, für das Sie den xpath erhalten möchten, und dann den xpath kopieren, um dieses Element auszuwählen.


2
Ja, ich weiß, dass es bei dieser Funktion Wiederholungen dieser Elemente gibt, anstatt nur eine zu bekommen. Ich möchte einen robusten Ansatz entwickeln.
Add-Semikolons
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.