2011-01-08 8 views
1

最近、nullを返すHtmlUnitにいくつかの問題があり、ガイダンスを探しています。ウェブサイトの最初の行を取得した結果はそれぞれnullになりました。私は、彼らはnullを返すことがありますなぜ誰かがGroovy htmlunit getFirstByXPath null + OCRを返す質問

A)が説明できる場合は疑問に思って

B)がいくつか存在する場合)の情報ここで

を得ることについて移動する(より良い方法を説明私の現在のコード(URLはソースである):

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

def url = "http://www.hidemyass.com/proxy-list/" 

page = client.getPage(url) 

IpAddress = page.getFirstByXPath("//html/body/div/div/form/table/tbody/tr/td[2]").getValue() 
println "IP Address is: $data"   //returns null 

//Port_Number is an Image 

Country = page.getFirstByXPath("//html/body/div/div/form/table/tbody/tr/td[4][@class='country']/@rel").getValue() 
println "Country abbreviation is: $Country" 

//differentiate speed and connection by name of gif? 

Type = page.getFirstByXPath("//html/body/div/div/form/table/tbody/tr/td[7]").getValue() 
println "Proxy type is: $Type" 

Anonymity = page.getFirstByXPath("//html/body/div/div/form/table/tbody/tr/td[8]").getValue() 
println "Anonymity Level is: $Anonymity" 

client.closeAllWindows() 

今の私のXPathの全てがnullと以降.getvalue()明らかにヌルでは動作しません返します。

画像であるのでPORTについて私は何をすべきか質問がありますか?それをダウンロードしてOCRで解決しようとするよりも良い選択肢はありますか?

側注このサイトでは意味がありません

、私はちょうど私が(私はフラグメントのアイデンティティの問題に遭遇した最後のものを上こする練習ができ、得ることができなかったサイトを探していましたあなたのxpathクエリが間違っているように見えます:HtmlUnit getByXpath returns nullHtmlUnit and Fragment Identities

答えて

1

コードサンプルで提供されているURLに基​​づいて、フォーム要素を検索パスから削除する必要があります。ここで

alt text

たときにページの変更のレイアウト破壊しにくいだろうXPathクエリです。

限り、ポート番号はそのページの作者は、データの一部が何らかの理由で掻き取りされていないと思っている必要があります行くよう
//table[@id='proxylist-table']/tbody/tr/td[2] 

。 OCRを行うのが最善の選択肢かもしれません。

ただし、ポート番号を推測するために返される画像のサイズを調べることができます。たとえば、ポート80を表示する画像のコンテンツの長さはすべて406または411です。ポート8080は402または409のいずれかです。画像には2つの異なるサイズがあり、行の色と混ざります。 Urlが1で終わっている場合、白い背景を持ちます.0で終わると、明るい灰色の背景があり、常に数バイト大きくなります。このアプローチには明らかな欠点がありますが、うまくいく可能性があります。

+0

フォームを含む私のXPathsを取得するためにfirebugを使用しました(私は正しいと思いました)。ただし、XPathから* form *を削除してもnullが返されます。 – StartingGroovy

+0

Aaronさん、ありがとうございます。私はXPathを再チェックしました。**/html/body // table/tbody/tr/td [2] **これは私に正しい情報を与えるようです。その値。その部分は解決されていますので、残りの唯一のものは私の他の質問です。 – StartingGroovy

+1

@StartingGroovy - より良いXPathクエリを更新し、ポート番号が画像であるという質問に対する回答を追加しました。 –