-
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