Groovy htmlunit getFirstByXPath возвращает ноль + OCR Вопрос - PullRequest
1 голос
/ 08 января 2011

У меня было несколько проблем с HtmlUnit, возвращающим нули в последнее время, и я ищу руководство. каждый из моих результатов по захвату первой строки веб-сайта вернул null. Мне интересно, если кто-то может

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 возвращают ноль, и .getValue (), очевидно, не работает с нуль.

У меня также есть вопросы относительно того, что мне следует делать с ПОРТ , поскольку это изображение? Есть ли лучшая альтернатива, чем ее загрузка и попытка решить ее с помощью OCR?

Примечание на стороне

В этом сайте нет никакого значения, я просто искал сайт, на котором я мог бы попрактиковаться (последний, с которым я столкнулся с проблемами идентичности фрагментов и не смог получить ответ: HtmlUnit getByXpath возвращает null и HtmlUnit и идентификационные данные фрагмента )

1 Ответ

1 голос
/ 08 января 2011

Похоже, ваш запрос xpath неверен. На основе URL-адреса, приведенного в примере кода, элемент формы должен быть удален из пути поиска.

alt text

Вот запрос xpath, который будет менее подвержен разрыву при изменении макета страницы.

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

Что касается номера порта. Автор этой страницы, должно быть, хотел, чтобы эта часть данных по какой-то причине не была очищена. Лучше всего сделать OCR.

Однако, одну вещь, которую вы можете сделать, это посмотреть на размер возвращаемого изображения, чтобы угадать номер порта. Например, я заметил, что все изображения, отображающие порт 80, имеют длину содержимого 406 или 411. Порт 8080 имеет размер 402 или 409. Изображения имеют два разных размера, чтобы сливаться с цветом строки. Если URL-адрес заканчивается на 1, у него будет белый фон, если он заканчивается на 0, он будет иметь светло-серый фон и всегда будет на несколько байтов больше. У этого подхода есть очевидные недостатки, но он может работать.

...