2015-06-07 21 views
6

Ja próbuje drapać następujące strony: http://www.hudson211.org/zf/profile/service/id/659837Korzystanie XPath, aby wybrać atrybut href następującym rodzeństwo

Próbuję wybrać href obok „adres internetowy” tekstu. Poniższy selektor XPath dostaje znacznik jestem po:

$x("//th[contains(text(), 'Web Address')]/following-sibling::td/a") 

zwrotów

<a href="http://www.co.sullivan.ny.us">www.co.sullivan.ny.us</a> 

Jednak, kiedy konkretnie spróbować wyodrębnić href użyciu @href, zwracana jest wartość pusta tablica:

$x("//th[contains(text(), 'Web Address')]/following-sibling::td/a/@href") 

powraca []

to html z rzędu jestem lo oking pod adresem:

<tr valign="top"> 
    <td class="profile_view_left"></td> 
    <th align="left" class="profile_view_center">Web Address</th> 
    <td class="profile_view_right"> 
     <ahref="http://www.co.sullivan.ny.us">www.co.sullivan.ny.us</a>       </td> 
    <td></td> 
</tr> 

Odpowiedz

3

Zakładam, że korzystasz z konsoli Google Chrome z powodu tej funkcji $x(). Twoja ścieżka xpath, która wybieraatrybut faktycznie działała, tak jak testowałem w moim Chrome, tylko wynik nie jest wyświetlany na konsoli, tak jak w przypadku wybrania elementu - z powodu, że nie jestem do końca pewien: -

>var result = $x("//th[contains(text(), 'Web Address')]/following-sibling::td/a/@href") 
undefined 
>result[0].value 
"http://www.co.sullivan.ny.us" 

Sprawdź, że przy użyciu dokładnie tego samego wyrażenia zmienna result zawiera oczekiwaną wartość adresu URL. Jeśli Twoim celem jest wyświetlenie pojedynczej wartości href w konsoli bez dalszego przetwarzania, zrobi to:

>$x("//th[contains(text(), 'Web Address')]/following-sibling::td/a/@href")[0].value 
"http://www.co.sullivan.ny.us" 
+1

Dzięki! Walczyłem w tej samej sprawie. Mój problem polegał na wydobyciu href z '实体'. Jednak używając '// a [@name =" topic "]/@ href' konsola wyświetla pustą listę. Potem użyłem twojego podejścia i zdałem sobie z tego sprawę ** faktycznie zwraca poprawną listę **. Może błąd w Chrome -_- – Skywalker326