1

私はGroovyでコーディングしていますが、それが言語固有の一連の質問だとは思いません。

私は実際に2つの質問があります

最初の質問

HtmlUnit の使用中に問題が発生しました。私がつかもうとしているのはヌルだと言っています。

私がテストしているページは次のとおりです。 http://browse.deviantart.com/resources/applications/psbrushes/?order=9&offset=0#/dbwam4

私のコード:

client = new WebClient(BrowserVersion.FIREFOX_3)
client.javaScriptEnabled = false

page = client.getPage(url)

//coming up as null
title = page.getByXPath("//html/body/div[4]/div/div[3]/div/div/div/div/div/div/div/div/div/div/h1/a")

println title

これは単純に出力します: []

これは、ページがonclick()を使用しているためですか? もしそうなら、どうすればそれを回避できますか?JavaScript を有効にすると、cmd プロンプトが混乱します。

2 番目の質問

画像も取得したいのですが、(firebug を介して) XPath を取得しようとすると次のように表示されるため、問題が発生しています: //*[@id="gmi-ResViewSizer_img"]

どうすればそれを処理できますか?

4

2 に答える 2

1

最初の答え:

/html/body/div[3]/div/div[3]/div/div/div/div/div/div/div/div/div/div/h1/a

XPATH はdiv、本文の 4 番目の述語フィルターで 1 つずれていました。これは 3 番目である必要がありdivます。サイトの HTML は、最初に Firebug を使用して XPATH を取得したときから変更できる/変更しているようです。XPATH を調整して、潜在的な変更に対応し、ドキュメント構造の違いに敏感にならないようにする必要がある場合があります。

多分このようなもの:

/html/body//div/h1/a

2 番目の回答:リストした XPATH が機能します。奇妙/短く見えるかもしれませんが (そして最も効率的ではないかもしれません)、//ルート ノードから開始し、ツリー内のすべてのノード全体を検索し、任意の要素 ( を含む)*に一致し、述語フィルターがそれを持っているものに制限します。値が「gmi-ResViewSizer_img」に等しい属性。img[]id

同様に機能する XPATH には、他にも多くのオプションがあります。また、HTML 構造が変更される頻度にも依存します。これは、それを選択するために参照されるページでも機能するものですimg

/html/body/div/div/div/div/img[1]
于 2010-12-01T02:26:45.630 に答える
0

私は同じ問題を抱えていました。ページ上のiframeタグに気付いたときに解決しました。

((HtmlPage)current_page.getFrames()[n].getEnclosedPage()).getElementByXPath(...

ここで、n は iframe コレクション内のフレーム内の位置です。それは私のための仕事です!!!

どうもありがとう。

于 2011-01-02T21:33:55.040 に答える