我试图使用在stackoverflow上发现的不同方法来保存.pdf文件FileUtils IO,但是,我总是会损坏它。当我使用记事本打开损坏的文件时,我得到以下信息:
FileUtils IO
<HEAD> <TITLE> 09010b129fasdf558a- </TITLE> </HEAD> <HTML> <SCRIPT language="javascript" src="./js/windowClose.js"></SCRIPT> <LINK href="./theme/default.css" rel="stylesheet" type="text/css"> <LINK href="./theme/additions.css" rel="stylesheet" type="text/css"> <BODY leftmargin="0" topmargin="0"> <TABLE cellpadding="0" cellspacing="0" width="100%"> <TR> <TD class="mainSectionHeader"> <A href="javascript:windowClose()" class="allLinks"> CLOSE </A> </TD> </TR> </TABLE> <script language='javaScript'> alert('Session timed out. Please login again.\n'); window.close(); </script> </BODY> </HTML>
后来,我尝试.pdf使用@BalusC提供的答案从浏览器中保存文件。这个解决方案非常有帮助:我能够摆脱这些session问题。但是,它也会产生损坏的.pdf。但是当我用记事本打开它时,它是完全不同的。但是,不再有登录问题:
.pdf
session
<HTML> <HEAD> <TITLE> Evidence System </TITLE> </HEAD> <LINK href="./theme/default.css" rel="stylesheet" type="text/css"> <TABLE cellpadding="0" cellspacing="0" class="tableWidth760" align="center"> <TR> <TD class="headerTextCtr"> Evidence System </TD> </TR> <TR> <TD colspan="2"> <HR size="1" noshade> </TD> </TR> <TR> <TD colspan="2"> <HTML> <HEAD> <link href="./theme/default.css" rel="stylesheet" type="text/css"> <script language="JavaScript"> function trim(str) { var trmd_str if(str != "") { trmd_str = str.replace(/\s*/, "") if (trmd_str != ""){ trmd_str = trmd_str.replace(/\s*$/, "") } }else{ trmd_str = str } return trmd_str } function validate(frm){ //check for User name var msg=""; if(trim(frm.userName.value)==""){ msg += "Please enter your user id.\n"; frm.userName.focus(); } if(trim(frm.password.value)==""){ msg += "Please enter your password.\n"; frm.userName.focus(); } if (trim(msg)==""){ frm.submit(); }else{ alert(msg); } } function numCheck(event,frm){ if( event.keyCode == 13){ validate(frm); } } </script> </HEAD> <BODY onLoad="document.frmLogin.userName.focus();"> <FORM name='frmLogin' method='post' action='./ServletVerify'> <TABLE width="100%" cellspacing="20"> <tr> <td class="mainTextRt"> Username <input type="text" name="userName" maxlength="32" tabindex="1" value="" onKeyPress="numCheck(event,this.form)" class="formTextField120"> </TD> <td class="mainTextLt"> Password <input type="password" name="password" maxlength="32" tabindex="2" value="" onKeyPress="numCheck(event,this.form)" class="formTextField120"> </TD> </TR> <tr> <td colspan="2" class="mainTextCtr" style="color:red"> Unknown Error </td> </tr> <tr> <td colspan="2" class="mainTextCtr"> <input type="button" tabindex="3" value="Submit" onclick="validate(this.form)" > </TD> </TR> </TABLE> <INPUT TYPE="hidden" NAME="actionFlag" VALUE="inbox"> </FORM> </BODY> </HTML> </TD> </TR> <TR> <TD height="2"></TD> </TR> <TR> <TD colspan="2"> <HR size="1" noshade> </TD> </TR> <TR> <TD colspan="2"> <LINK href="./theme/default.css" rel="stylesheet" type="text/css"> <TABLE width="80%" align="center" cellspacing="0" cellpadding="0"> <TR> <TD class="footerSubtext"> Evidence Management System </TD> </TR> <!-- For development builds, change the date accordingly when sending EAR files out to Wal-Mart --> <TR> <TD class="footerSubtext"> Build: v3.1 </TD> </TR> </TABLE> </TD> </TR> </TABLE> </HTML>
我还有什么其他选择?
PS:当我尝试使用手动保存文件时CTRL+Shift+S,文件将保存确定。
CTRL+Shift+S
从似乎只是HTML错误页面的错误响应中:
alert(“会话超时。请重新登录。\ n’);
因此,似乎需要在有效的HTTP会话中下载PDF文件。HTTP会话由cookie支持。HTTP会话反过来通常在服务器端包含有关当前活动和/或已登录用户的信息。
Selenium Web驱动程序自身完全透明地管理cookie。您可以通过编程方式获取它们,如下所示:
Set<Cookie> cookies = driver.manage().getCookies();
当手动摆弄java.net.URLSelenium的外部控制时,您应该确保自己自己,URL连接使用的是相同的cookie(并因此也维持相同的HTTP会话)。您可以在URL连接上设置cookie,如下所示:
java.net.URL
URLConnection connection = new URL(driver.getCurrentUrl()).openConnection(); for (Cookie cookie : driver.manage().getCookies()) { String cookieHeader = cookie.getName() + "=" + cookie.getValue(); connection.addRequestProperty("Cookie", cookieHeader); } InputStream input = connection.getInputStream(); // Write this to file.