ja parsowania stronę internetową, która zawiera strukturę takiego:XPath: znaleźć komórkę tabeli z tej samej pozycji w innym wierszu
<tr>
<td>Label 1</td>
<td>Label 2</td>
<td>Label 3</td>
<td>Something else</td>
<\tr>
<tr>
<td>Item 1</td>
<td>Item 2</td>
<td>Item 3</td>
<\tr>
Co muszę zrobić, to wybrać element oparty na jego etykiecie, więc moja myśl jeśli etykieta znajduje się w trzecim znaczniku w rzędzie, mogę pobrać trzeci znacznik w następnym wierszu, aby znaleźć przedmiot. Nie mogę znaleźć sposobu na użycie funkcji position() w ten sposób, a być może xpath (1.0) nie jest w stanie obsłużyć tego typu filtrowania.
Moja jak dotąd najlepsza próba to: //td[ancestor::tr[1]/preceding-sibling::tr[1]/td[position()]]
. Miałem nadzieję, że funkcja position() pobierze pozycję <td>
na początku ścieżki xpath, ponieważ reszta ścieżki xpath jest filtrem dla tego węzła.
Czy to, co próbuję zrobić, nawet możliwe?
Jakiej biblioteki/języka programowania używasz do wykonywania XPath? Nie sądzę, że można to zrobić w czystej wersji XPath 1.0, musisz zapisać 'position()' z zewnętrznego kontekstu w zmiennej, a następnie użyć tej zmiennej wewnątrz predykatu, a sposób ustawiania zmiennych zależy od narzędzia do narzędzia. –
Używam selenium webdriver. – eldon111
Jakie połączenia językowe selenium-webdriver używasz? Prawdopodobnie łatwiej jest korzystać z różnych metod selenowych niż z czystego rozwiązania xpath. –