2013-08-26 2 views
0

내가하려는 것은 웹 사이트로 이동하여 두 개의 드롭 다운 목록에서 항목을 선택하고 상자에 무언가를 입력 한 다음 버튼을 누릅니다. 그런 다음 입력 할 수없는 상자에 결과 텍스트를 표시하려고합니다.HtmlUnit을 사용하면 긴 오류 목록이 생성됩니다.

사용하려는 사이트는 http://www.worldlingo.com/en/products_services/worldlingo_translator.html이고 여기는 내가 얻으려고하는 모든 것을 수행하는 코드입니다 마지막 텍스트 (아직 어떻게 해야할지 모르겠다).

try { 
     final WebClient webClient = new WebClient(); 
     Page page = webClient.getPage("http://www.worldlingo.com/en/products_services/worldlingo_translator.html"); 

     HtmlSelect select = ((HtmlSelect) page).getElementById("SelSrcLang"); 
     HtmlOption option = select.getOptionByValue("English"); 
     select.setSelectedAttribute(option, true); 

     HtmlSelect select2 = ((HtmlSelect) page).getElementById("SelTrgLang"); 
     HtmlOption option2 = select2.getOptionByValue("French"); 
     select.setSelectedAttribute(option2, true); 

     final HtmlForm form = ((HtmlPage) page).getFormByName("form");   
     final HtmlSubmitInput button = form.getInputByName("Translate"); 
     final HtmlTextInput textField = form.getInputByName("wl_ft_print_text");   
     textField.setValueAttribute("How are you?"); 

     page = (HtmlPage) form.getInputByValue("Translate").click(); 

     System.out.println("Finished"); 

    } catch (FailingHttpStatusCodeException e) { } catch (MalformedURLException e) { } catch (IOException e) { } 

편집 : 변경 한 후

Page page = webCLient... 

HtmlPage page = webCLient... 

에 나는 오류를 얻을하지만 난 실행할 때 나는 "다음과 같은 오류를 주를 스레드에서

예외를 얻을 "com.gargoylesoftware.htmlunit.ElementNotFoundException : elementName = [op 기] 여기서 attributeName = 값]의 AttributeValue = [영문] com.gargoylesoftware.htmlunit.html.HtmlSelect.getOptionByValue에서 (HtmlSelect.java:437) maple.Main.main에서 (Main.java:43)

선 (43) 얘기하고있는 "오류"의

HtmlOption option = select.getOptionByValue("English"); 

답변

0

80 %가 실제로 경고입니다이다. 그것들은 대부분 당신이 무시할 수도있는 자바 스크립트의 부적합입니다. (코드에 실제로 접근 할 수 있다면 서버에서 수정하십시오. 코드를 웹 스크랩하고있는 것처럼 보이지는 않을 것입니다).

실제 오류의 19 %는 생성 할 수없는 플래시 개체와 관련이 있습니다. 이것은 HtmlUnit이 플래시를 처리 할 수 ​​없기 때문에 의미가 있습니다. 다른 유사한 질문 인 Faster page processing with HtmlUnit을 확인하십시오. 어쨌든, 실제로 정보 메시지가되어야하므로 오류를 무시해야합니다.

1 % 당신이 당신의 코드 실행 허용하지 않습니다 실제 오류입니다 : 나는 그것을 내기

 
Exception in thread "main" java.lang.ClassCastException: 
    com.gargoylesoftware.htmlunit.html.HtmlPage cannot be cast to 
    com.gargoylesoftware.htmlunit.html.HtmlSelect 
    at maple.Main.main(Main.java:42) 

I 라인 (42)이다 말할 수 없다 입력해도를이 하나입니다

HtmlSelect select = ((HtmlSelect) page).getElementById("SelSrcLang"); 

거기에 HtmlPage 개체가 있고이 개체를 HtmlSelect으로 전송 중입니다. 위의 예외가 생성됩니다. 아마 당신은이 작업을 수행하려고했던 : 당신이 HtmlPage 아닌 Page 객체를 사용하는 경우이

HtmlSelect select = (HtmlSelect) page.getElementById("SelSrcLang"); 

주에만 작동합니다. JavaDoc을 참조하십시오.

나는이 원격 디버깅 세션이 도움이되었습니다 :) 희망

+0

나는 그것이 오류 "방법에서 getElementById (문자열) 유형 페이지에 정의되지 않은이 있다고 하더군요 (실제로 라인 42 인) 라인을 변경하는 경우 "해결 방법은"괄호 주위에 괄호 추가 "입니다. – user2612619

+0

당신이 사용하고있는 IDE (이클립스)는 오류를 추측하기 위해 최선을 다하고 있습니다. 그러나, 그들은 항상 옳지 않습니다. 이 오류는 JavaDoc을 읽을 때 분명합니다. 답변을 업데이트했습니다. –

+0

그래서 그 페이지를 사용할 수 없거나 다른 방법이 있습니까? – user2612619

관련 문제