HtmlUnit обращается к элементу без идентификатора или имени

Как я могу получить доступ к этому элементу:

<input type="submit" value="Save as XML" onclick="some code goes here">

Дополнительная информация: мне нужно программно получить доступ к веб-странице и имитировать нажатие на нее кнопки, что затем создаст XML-файл, который я надеюсь сохранить на локальном компьютере.
Я пытаюсь сделать это с помощью с использованием библиотек HtmlUnit, но все примеры, которые мне удалось найти, используют методы getElementById() или getElementByName(). К сожалению, у этого точного элемента нет имени или идентификатора, поэтому я с треском провалился. Тогда я предположил, что мне нужно использовать метод getByXPath(), но я полностью потерялся в документации по XPath (этот вопрос для меня в новинку).
Я застрял на это на пару часов, поэтому мне действительно нужна вся помощь, которую я могу получить.
Заранее спасибо.


person Nikola Kolev    schedule 02.12.2010    source источник


Ответы (2)


Есть несколько вариантов для XPATH для выбора этого элемента input.

Ниже приведен один из вариантов, который ищет в документе элемент input, который имеет атрибут с именем type со значением «отправить» и атрибут с именем value со значением «Сохранить». как XML».

//input[@type='submit' and @value='Save as XML']

Если бы вы могли предоставить немного больше структуры, можно было бы создать более конкретный (и эффективный) XPATH. Например, что-то вроде этого может работать:

/html/body//form//input[@type='submit' and @value='Save as XML']

Вы должны иметь возможность использовать XPATH с таким кодом:

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

page = client.getPage(url)

submitButton = page.getByXPath("/html/body//form//input[@type='submit' and @value='Save as XML']")
person Mads Hansen    schedule 02.12.2010
comment
Спасибо, Мэдс, я уже придумал ответ для себя (с каким-то жутко уродливым кодом :)), но ваше решение лучше и элегантнее. - person Nikola Kolev; 02.12.2010

Хотя в большинстве случаев я бы рекомендовал использовать XPath, если вы ничего об этом не знаете, вы можете попробовать getInputByValue(строковое значение). Это пример, основанный на вашем вопросе:

// Fetch the form somehow
HtmlForm form = this.page.getForms().get(0);
// Get the input by its value
System.out.println(form.getInputByValue("Save as XML").asXml());
person Mosty Mostacho    schedule 22.01.2014