2013-03-24 3 views
1

잠시 동안이 포럼을 읽지 만 방금 등록했습니다.이 글은 내 첫 번째 게시물이므로 여기에서 훌륭한 일을 할 수 있습니다.HtmlUnit 로그인 팝업 문제

저는 HtmlUnit을 사용하여 구독자 인 잡지 중 하나에 연결하고 로그인하여 저에게 관심있는 기사를 검색 할 목적으로 Java로 프로그램을 작성하고 있습니다. 일단 그것이 작동하게되면 나에게 이메일을 보내지 만 그건 내 질문과 관련이 없다.

나는 로그인이 동작하지 않습니다 : 내가 로그인 버튼을 찾아, 그것은

  • 새 페이지에 결과를 캡처 클릭 형태와 공급을 추출 페이지
  • 을 읽을
    • 당신이 로그인을 클릭하면 사용자 이름/암호 및 로그인 버튼을 마지막으로
    • 클릭

    는 팝업이납니다. 하지만 팝업을 캡처 할 수없는 것 같습니다. 나는 양식을 얻고 필드를 공급, 로그인 페이지를 얻을

    public void authenticate() throws MalformedURLException, IOException 
    { 
    
        LogFactory.getFactory().setAttribute("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog");  
        java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(Level.OFF); 
        java.util.logging.Logger.getLogger("org.apache.commons.httpclient").setLevel(Level.OFF); 
    
        WebClient webClient = new WebClient(BrowserVersion.INTERNET_EXPLORER_9); 
        webClient.getOptions().setJavaScriptEnabled(true); 
        webClient.getCookieManager().setCookiesEnabled(true); 
        webClient.getOptions().setThrowExceptionOnScriptError(false); 
        webClient.getOptions().setPopupBlockerEnabled(false); 
    
        webClient.addWebWindowListener(new WebWindowListener() 
        { 
    
          public void webWindowOpened(WebWindowEvent event) 
    
          { 
           System.out.println("a NEW window opened: " + event.getNewPage()); 
           windows.add(event.getWebWindow()); 
    
          } 
    
         @Override 
         public void webWindowClosed(WebWindowEvent event) { 
          System.out.println("a window is CLOSED: " + event.getOldPage()); 
          // TODO Auto-generated method stub 
    
         } 
    
         @Override 
         public void webWindowContentChanged(WebWindowEvent event) {} 
    
        }); 
    
        // Get the first page 
        HtmlPage page1 = webClient.getPage("**"); 
        HtmlDivision div = (HtmlDivision) page1.getElementById("topContainer"); 
    
        HtmlAnchor anchor = (HtmlAnchor) div.getElementById("loginBtn1");  
        HtmlPage logPage = (HtmlPage) anchor.click(); 
        System.out.println("logPage is: "+logPage); 
    
        if (windows.size() > 0) 
        { 
         System.out.println("YIOUHOUU"); 
          HtmlPage popupPage = getPopupPage(); 
          System.out.println(popupPage.getTitleText()); 
        } 
    
        HtmlForm form = logPage.getFormByName("loginForm"); 
        System.out.println("Form: "+ form); 
    
        HtmlTextInput username = form.getInputByName("username"); 
        HtmlPasswordInput password = form.getInputByName("password"); 
        HtmlCheckBoxInput rememberPassword = form.getInputByName("remember"); 
        HtmlCheckBoxInput acceptTerms = logPage.getElementByName("acceptTerms"); 
        HtmlAnchor button = form.getElementById("loginButton"); 
    
        username.setValueAttribute("USER"); 
        password.setValueAttribute("RANDOM_PASS"); 
        rememberPassword.setChecked(true); 
        acceptTerms.setChecked(true); 
    
        System.out.println(form.toString()); 
    
        HtmlPage page2 = button.click(); 
        System.out.println(page2.asText()); 
        webClient.closeAllWindows(); 
    } 
    

    :

    내 코드입니다. 모두 완료되었지만 두 번째 페이지에서 로그인을 클릭하면 아무 일도 일어나지 않습니다.

    필드를 제출하고 SUbmit을 클릭하더라도 아무 일도 일어나지 않습니다. 나는 html 페이지의 근원을보고있다 그러나 왜, ajax 또는 sth 그 밖의 배경에서 인 파악할 수 없는가? 어떤 도움

  • 답변

    0

    ** UPDATE에 미리

    감사합니다 : 이것을 포기하고 파이로이 간편한이 사용하는 셀레늄과 WebDriver API를 해결했다. Htmlunit은 이러한 유형의 작업에는 적합하지 않으며 내 조언에주의를 기울여 비슷한 목적으로 사용하지 않는 것으로 보입니다.

    1

    팝업 로그인 상자의 경우 url을 사용하여 사용자 이름과 암호를 전달할 수 있습니다.

    String url = "http://example.com"; 
    HtmlPage page = webClient.getPage(url); 
    

    그런 다음 한 다음에이 링크를 변경하고 작동합니다 : 당신이 다음 줄을 사용하는 경우

    해당 로그인 페이지에 얻을 수

    String username = "YOUR USERNAME"; 
    String password = "YOUR PASSWORD"; 
    String url = "http://" + username + ":" + password + "@example.com"; 
    HtmlPage page = webClient.getPage(url); 
    
    +0

    @blondeamon을 할 수 이 대답을 수락하십시오? –