HtmlUnit обращается к элементу без идентификатора или имени - PullRequest
4 голосов
/ 02 декабря 2010

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

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

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

Ответы [ 2 ]

11 голосов
/ 02 декабря 2010

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

Ниже приведена одна опция, которая просматривает весь документ для элемента input, который имеет атрибут с именем тип со значением "submit" и атрибут с именем 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']")
0 голосов
/ 22 января 2014

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

// 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());
...