HtmlUnit getByXpath возвращает ноль - PullRequest
1 голос
/ 01 декабря 2010

Я пишу код на Groovy, однако я не верю, что это набор вопросов для конкретного языка.

У меня на самом деле два вопроса

Первый вопрос

Я столкнулся с проблемой при использовании 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 создает беспорядок в моей командной строке.

Второй вопрос

Я хочу также получить изображение, но у меня возникают проблемы, потому что, когда я пытаюсь получить XPath(через firebug) это выглядит как: // * [@ id = "gmi-ResViewSizer_img"]

Как мне справиться с этим?

Ответы [ 2 ]

1 голос
/ 01 декабря 2010

Первый ответ:

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

Ваш XPATH был равен единице в фильтре предикатов для 4-го div тела, это должен быть 3-й div.Похоже, что HTML-код сайта может измениться, если вы изначально поймали XPATH с помощью Firebug.Возможно, вам придется настроить XPATH так, чтобы он учитывал возможные изменения и был менее чувствителен к некоторым различиям в структуре документа.

Может быть что-то вроде этого:

/html/body//div/h1/a

Второй ответ: XPATH, который вы перечислили, будет работать.Это может выглядеть странно / коротко (и может быть не самым эффективным), но // начинается с корневого узла и просматривает все узлы в дереве, * соответствует любому элементу (включая img) ифильтр предикатов [] ограничивает его теми, у кого есть атрибут id, значение которого равно "gmi-ResViewSizer_img".

Есть много других опций для XPATH, которые также могут работать.Это также будет зависеть от того, как часто меняется структура HTML.Это тот, который также работает на странице, на которую ссылаются, чтобы выбрать img:

/html/body/div/div/div/div/img[1]
0 голосов
/ 03 января 2011

У меня была такая же проблема, я решил, когда я понимаю теги iframe на странице, попробуйте вызвать

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

где n - позиция в кадре в коллекции iframe. Это работа для меня !!!

Большое спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...