使用HtmlUnit上传文件时收到错误

时间:2017-01-05 20:16:56

标签: java htmlunit

我目前正在尝试自动将文件上传到特定网站。我能够成功登录该站点并导航到导入页面;但是,当我尝试导入文件时,收到错误。我的猜测是因为我只是一个用户,并且没有被授予写入服务器的权限。但是,如果我手动执行导入,则表示成功。通常情况下,导入将有四个阶段。但是,在第一步之后,您可以看到发生了错误。下面列出了我的代码以及我收到的错误:

public static void main(String args[]) throws Exception {
    login();
}

        @SuppressWarnings("resource")
        public static void login() throws Exception {   

            // Open the webclient using Internet Explorer (Chrome does not work).
            final WebClient webClient = new WebClient(BrowserVersion.INTERNET_EXPLORER);
            // Get the first page
            final HtmlPage page = webClient.getPage("http://telephone.qqest.com/phone/Login/Login.asp");
            // Get the form that we are dealing with.
            final HtmlForm loginForm = page.getFormByName("frmLogin");
            final HtmlTextInput userName = loginForm.getInputByName("Login");
            final com.gargoylesoftware.htmlunit.html.HtmlPasswordInput passWord = (com.gargoylesoftware.htmlunit.html.HtmlPasswordInput) 
                    loginForm.getInputByName("Password");
            final HtmlTextInput companyID = loginForm.getInputByName("Ident");

            webClient.getOptions().setCssEnabled(false); 
            webClient.getOptions().setRedirectEnabled(true);
            webClient.setAjaxController(new NicelyResynchronizingAjaxController());
            webClient.getCookieManager().setCookiesEnabled(true);
            //final HtmlInput login = loginForm.getInputByName("Login");

            // Change the values of the text fields.
            userName.setValueAttribute("xxxx");
            passWord.setValueAttribute("xxxxx");
            companyID.setValueAttribute("xxxxx");

            //create a submit button - it doesn't work with 'input'
            DomElement loginBtn = page.createElement("button");
            loginBtn.setAttribute("type", "submit");
            // append the button to the form
            loginForm.appendChild(loginBtn);
            // submit the form
            loginBtn.click();

            //navigate to page for import.
            HtmlPage page3 = webClient.getPage("http://telephone.qqest.com/phone/Imports/Employee/Module.asp");
            //populate the textfield with the specified file.
            final HtmlForm importForm =  page3.getFormByName("ImportForm");
            final HtmlFileInput inputFile = importForm.getInputByName("UploadFile");
            inputFile.setValueAttribute("C:\\Users\\thisFile.xls");
            inputFile.click();
            final HtmlSubmitInput importBtn = (HtmlSubmitInput)importForm.getInputByValue("Import");

            try {
                importBtn.fireEvent(Event.TYPE_INPUT);
            }
            catch (NullPointerException ex) {
                System.err.println(ex);
            }

            HtmlPage page4 = webClient.getPage("http://telephone.qqest.com/phone/Imports/Employee/ImportFile.asp?FileType=application/vnd.ms-excel&FilePath=c%3A%5Cinetpub%5Cwwwroot%5Cphone%5CDownloads%5CImports%5C&FileName=thisFile.xls.asp");

            System.out.println("Import Page: " + page4.asText());

    }

我收到的错误:

第1阶段:上传文件 - 已完成 Microsoft JET数据库引擎错误' 80004005'  无法更新。数据库或对象是只读的。  /phone/Imports/Employee/ImportFile.asp,第155行

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案,并希望将它发布给那些可能会在将来发现它有用的人。问题是我只是想通过使用URL重定向到导入页面。在此之前,我尝试使用importBtn.click()声明提交表单;但是,我需要将此语句声明为其自己的HtmlPage变量。

            final HtmlSubmitInput importBtn = (HtmlSubmitInput)importForm.getInputByValue("Import");
            HtmlPage page4 = importBtn.click();

            //  loops until the page changes.
            while(page4 == page3) {
                // The page hasn't changed.
                Thread.sleep(500);

            }
            System.out.println("Import Page: " + page4.asText());