2016-08-31 9 views
0

Мне нужно получить около 70 документов с веб-сайта (www.genios.de). У каждого документа есть своя ссылка, и вам нужно войти в WebSite, чтобы получить доступ к документам.Скрап с HtmlUnit в Java (Как найти элементы)

Хотя я мог это сделать вручную, я хочу сделать это на Java, чтобы научиться лучше кода.

Я искал интернет и нашел HtmlUnit, который, кажется, предоставляет все необходимое мне. Моя проблема в том, что я не могу получить TextFields для имени пользователя/пароля и кнопки для входа в систему.

Я пробовал разные способы, но ни один из них не работает. Одна попытка была следующий код:

final WebClient webClient = new WebClient(); 
    final HtmlPage page1 = webClient.getPage("http://www.genios.de"); 
    final List<HtmlForm> forms = (List<HtmlForm>) page1.getForms(); 
    final HtmlForm form = forms.get(0); 
    HtmlInput usernameInput = form.getInputByName("loginBlock_username"); 

Результирующее в:

Exception in thread "main" com.gargoylesoftware.htmlunit.ElementNotFoundException: elementName=[input] attributeName=[name] attributeValue=[loginBlock_username] 
    at com.gargoylesoftware.htmlunit.html.HtmlForm.getInputByName(HtmlForm.java:469) 
    at GeniosLogin.main(GeniosLogin.java:26) 
+0

Пробовал использовать селектор CSS, когда вы выбираете нужное вам поле, в браузере Chrome, например, вы можете выбрать инспектор, а затем селектор css. – imoteb

+0

(ранее не работал с HtmlForm), но имеет ли он 'getInputById', который вы могли бы использовать? или попробуйте 'getInputByName (" loginBlock.username ")'? – Robin

+0

@Anja По какой-то причине нет 'getInputById'. loginBlock.username работает! Но как вы это нашли? Я также ищу loginButton, так как ни loginBlock_c2, ни loginBlock.c2, похоже, не работают с 'getButtonByName'. – Burschken

ответ

0

Идентификатор поля 'loginBlock_username. Фактическое имя поля, которое вы пытаетесь получить, это «loginBlock.username»

+0

Это работает! Но где вы прочитали это имя? Я понимаю, что это было здесь? jQi ('loginBlock_username'). Jasty («TextBox», «init», [{«id»: «loginBlock.username», Даже если он говорит id, это единственная строка, которую я нашел с именем loginBlock.username ». Не у меня есть проблемы с получением кнопку входа, чтобы работать, хотя это должно быть так:. \t HtmlButton Войти = form.getButtonByName ("loginBlock.c2"); \t \t HTMLPage стр.2 = login.click () Но он не работает. =/ – Burschken

+0

Это разметка на странице

+0

Я нажал« показать код »в chrome, и я искал loginBlock.username. Единственное совпадение: jQi ('loginBlock_username'). Jasty («TextBox», «init», [{«id»: «loginBlock.username», ......) Хо, вы видели разметку? – Burschken