2016-08-31 2 views
0

웹 사이트 (www.genios.de)에서 약 70 개의 문서를 가져와야합니다. 모든 문서에는 링크가 있으므로 문서에 대한 액세스 권한을 얻으려면 WebSite에 로그인해야합니다.Java에서 HtmlUnit을 사용한 스크래핑 (요소 찾기)

수동으로 할 수 있지만 코드를 더 잘 배우려면 Java에서이 작업을 수행하고 싶습니다.

인터넷을 검색하여 필요한 모든 것을 제공하는 것으로 보이는 HtmlUnit을 찾았습니다. 내 문제는 사용자 이름/비밀번호 및 로그인 버튼에 대한 TextField를 가져올 수 없다는 것입니다.

다른 방법을 시도했지만 그 중 아무 것도 작동하지 않았습니다. 결과

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"); 

: 필드의 ID가 '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 선택기를 사용하려고했습니다. 예를 들어 크롬 브라우저에서 inspect와 css selector를 선택할 수 있습니다. – imoteb

+0

(이전에는 HtmlForm을 사용 해보지 못했지만) 사용할 수있는'getInputById'를 가지고 있습니까? 또는'getInputByName ("loginBlock.username")'을 시도해보십시오. – Robin

+0

@Anja 어떤 이유로 'getInputById'가 없습니다. loginBlock.username 작품! 그런데 어떻게 찾았습니까? 또 loginBlock_c2도 loginBlock.c2도 'getButtonByName'과 함께 작동하지 않기 때문에 loginButton을 찾고 있습니다. – Burschken

답변

0

하나의 시도는 다음 코드이었다. 당신이 얻으려고하는 필드의 실제 이름은 'loginBlock.username'입니다

+0

에 의해 유발되었습니다. 그런데 그 이름을 어디에서 읽었습니까? 나는 여기가있어? jasty ("TextBox", "init", [{ "id": "loginBlock.username", id라고해도 "loginBlock.username" ". 내가 일할 수있는 로그인 버튼을 점점 문제가되지는 이런 식으로해야하지만 :. \t HtmlButton 로그인 = form.getButtonByName ("loginBlock.c2 "); ( \t \t HtmlPage 페이지 2 = login.click); 하지만 작동하지 않습니다. =/ – Burschken

+0

이것은

+0

크롬에서"코드보기 "를 클릭하고 loginBlock.username을 검색했습니다. 유일한 일치 항목은 jQi ('loginBlock_username')입니다. jasty ("TextBox", "init", [{ "id": "loginBlock.username", ......) 마크를 보았습니까? – Burschken