2011-01-08 3 views
1

최근 Null을 반환하는 HtmlUnit에 몇 가지 문제가있어 지침을 찾고 있습니다. 각 웹 사이트의 첫 번째 행을 잡아 내 결과는 null을 반환했습니다. 나는 그들이 null을 반환 할 이유 누군가가Groovy htmlunit getFirstByXPath null + OCR을 반환합니다. Question

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() 분명히 널 (null)에서 작동하지 않습니다 반환합니다.

이미지이기 때문에 PORT에 대해 내가해야 할 일에 대해서도 질문이 있으십니까? 그것을 다운로드하고 OCR로 해결하려고 시도하는 것보다 나은 대안이 있습니까?

사이드 참고이 사이트에있는 아무 의미가 없습니다

, 난 그냥 (내가 조각 정체성의 문제로 마지막으로 실행 한에 긁어 연습 할 수 있고 얻을 수있는 사이트를 찾고 있었다 에 대한 답변 : HtmlUnit getByXpath returns nullHtmlUnit and Fragment Identities)

답변

1

xpath 검색어가 잘못되었습니다. 코드 샘플에 제공된 URL을 기반으로 양식 요소가 검색 경로에서 제거되어야합니다. 여기

alt text

가 파괴 적은 경향이있을 것이다 XPath 쿼리 때 페이지 변경의 레이아웃.

//table[@id='proxylist-table']/tbody/tr/td[2] 

포트 번호가 변경된 경우 해당 페이지의 작성자는 어떤 이유로 데이터의 해당 부분을 긁지 않았 으면합니다. OCR을하는 것이 최선의 선택 일 수 있습니다.

하지만 포트 번호를 추측하기 위해 반환되는 이미지의 크기를 살펴볼 수 있습니다. 예를 들어, 포트 80을 표시하는 이미지의 내용 길이는 모두 406 또는 411입니다. 포트 8080은 402 또는 409입니다. 행 색상과 혼합 할 이미지에는 두 가지 크기가 있습니다. URL이 1로 끝나면 0으로 끝나면 흰색 배경이됩니다. 밝은 회색 배경이고 항상 몇 바이트 더 커야합니다. 이 접근 방식에는 명백한 단점이 있지만 작동 할 수 있습니다.

+0

폼을 포함하는 XPath를 가져 오기 위해 방화 광구를 사용했습니다 (올바른 것으로 가정). 그러나 XPath에서 * form *을 제거해도 null이 반환됩니다. – StartingGroovy

+0

응답 해 주신 Aaron에게 감사드립니다. 이제 XPath를 다시 확인해 보았습니다. **/html/body // table/tbody/tr/td [2] **에 대한 정확한 정보를 제공하는 것 같습니다. 그 값. 그 부분은 해결되었습니다 (지금 당장). 남은 유일한 문제는 저의 다른 질문입니다. – StartingGroovy

+1

@StartingGroovy - 더 나은 XPath 쿼리로 업데이트하고 포트 번호가 이미지라는 질문에 대한 답변을 추가했습니다. –

관련 문제