ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • HtmlUnit : 파일을 다운로드 한 후 UnexpectedPage 가져오기
    카테고리 없음 2020. 8. 4. 16:31

    질문

     

    htmlUnit webDriver를 사용하여 다른 페이지에서 다른 파일을 다운로드해야합니다. 페이지를 순환하고 모든 페이지에 대해 입력 필드를 클릭하여 다운로드를 트리거합니다.첫 번째 다운로드의 경우 파일을 다시 제공하는 HtmlInputElement (제출 버튼)를 클릭합니다. 그 후 HtmlPage가 UnexpectedPage가됩니다. UnexcpetedPage에서 WebResponse를 검토 한 후에도 파일이 이미 다운로드 된 것을 발견했습니다.해결 방법?

    암호: [...]

    public void test(HtmlPage htmlPage){
        List<?> checkBox = htmlPage.getByXPath("//tbody[@id='TestID:ricerca_report:tb']/tr[child::td[contains(text(),'TEST')]]/td[1]/input[@type='checkbox']");
    
        for (int j = 0; j < checkBox.size(); j++) {
            HtmlCheckBoxInput checked = (HtmlCheckBoxInput) checkBox.get(j);
            checked.setChecked(true);
        }
    
        writeResponseHtml(htmlPage, spOp);
        InputStream input = null;
        try{
            HtmlSubmitInput htmlSubmitInput = htmlPage.getElementByName(param.getNameAttribute());
            WebResponse webResponse = htmlSubmitInput.click().getWebResponse();
            extractOriginalFileName(webResponse, spiderInfo.getFileName());
            if( checkAndSaveFileExtension(webResponse) != null ){
                input = webResponse.getContentAsStream();
                downloadFile( input );
                spiderInfo.setFileName("work/output/spider_logs/");
            }else
                spiderInfo.setSpiderState(SpiderStates.DOWNLOAD_ERROR);
        }catch ( Exception e ){
            logger.error("getOperation download exception; " + spOp + "; Exception: " + e);
            spiderInfo.setSpiderState(SpiderStates.DOWNLOAD_ERROR);
            page = null;
        }
        writeResponseHtml(htmlPage, spOp);
        HtmlTableDataCell tableCell = htmlPage.getFirstByXPath(param.getContainsElement2());
        Page p = tableCell.click(); // Here i got the exception
    }
    
    [....]

     

    답변1

     

    누군가 같은 문제가 발생한 경우; PageCreator 를 사용하여 해결했습니다.

    PageCreator dpc = new DefaultPageCreator();
    HtmlPage detailPage = null;
    for (int j = 2 ; j<= 11; j++){ // there are 10 pages
      detailPage = (HtmlPage)dpc.createPage(htmlPage.getWebResponse(),webClient.openWindow(htmlPage.getUrl(),"ew Window"));
      detailPage = ((HtmlElement)detailPage.getFirstByXPath("MYXPATH")).click();
      detailPage = ((HtmlElement)((HtmlPage)detailPage ).getFirstByXPath("MYXPATH2")).click(); // download element
      webClient.setCurrentWindow(htmlPage.getEnclosingWindow()); //go back to main window
    }// end FOR

    여기서 htmlPage는 기본 페이지입니다.

     

     

     

     

     

    출처 : https://stackoverflow.com/questions/17112534/htmlunit-get-unexpectedpage-after-downloading-a-file

    댓글

Designed by Tistory.