4

HTML ページにはページング リンクがあり、1 つはページの上部に、もう 1 つはページの下部にあります。

HtmlUnit を使用して、現在、ページで HtmlAnchor を使用して取得していますgetByAnchorText("1");

上のリンクの一部に問題があるので、下のリンクをXPathで参照したい。

nextPageAnchor = (HtmlAnchor) page.getByXPath("");

xpathを使用して、ページの2番目のリンクを参照するにはどうすればよいですか?

AnchorText を使用してリンクを参照する必要があるため、次のようなリンクです。

<a href="....">33</a>

href にはランダムなテキストがあり、javascript 関数なので、それがどうなるかわかりません。

これはxpathで可能ですか?

4

2 に答える 2

10

aドキュメント内の任意の場所で2 番目の要素を選択するには:

(//a)[2]

a属性に特定のテキストを持つ2 番目の要素を選択するにはhref:

(//a[@href='...'])[2]

//a[2]括弧が必要であり、式が意図したとおりに動作しないことに注意してください。親aの 2 番目の要素であるすべての要素が選択されます。aあなたの入力が

<p>Link <a href="one.html">One</a></p>
<p>Link <a href="two.html">Two</a> and <a href="three.html">Three</a>.</p>
<p>Link <a href="four.html">Four</a> and <a href="five.html">Five</a>.</p>

(//a)[2]は 2 番目のリンク (two.html)//a[2]を返しますが、3 番目と 5 番目のリンク (three.html と five.html) はどちらもa親の 2 番目の子であるため、 は返します。

于 2010-04-12T05:55:51.987 に答える
4

それはとても簡単です:

 (//a)[2]

//aページ上のすべてのアンカーを[2]取得し、2 番目のアンカーを取得します (たとえば、配列で期待されるように、2 は実際には 2 番目であり、3 番目ではありません)。

のテキストとのリンクを取得したい場合は33、次を使用できます。

 //a[./text() = "33"]

完全な xpath 定義については、http://www.w3.org/TR/xpath/を参照してください。

編集

アレクサンドルのコメントに対処するには、次を使用できます

 (//a[./text() = "33"])[2]

<a>これにより、最初にテキストが 33 のすべてのタグが選択され、次に 2 番目のタグが選択されます。

編集2

注: ロケーション パス //para[1] は、ロケーション パス /descendant::para[1] と同じ意味ではありません。後者は、最初の子孫の para 要素を選択します。前者は、親の最初の para 子であるすべての子孫 para 要素を選択します。

マーカスクは確かに正しいです。上記の引用は、上記の xPath 定義からのものです。

于 2010-04-12T00:38:09.617 に答える