2017-01-05 5 views
0

В настоящее время я пытаюсь автоматизировать загрузку файла на определенный сайт. Я могу успешно войти на сайт и перейти на страницу импорта; однако, когда я пытаюсь импортировать файл, я получаю сообщение об ошибке. Я предполагаю, что это потому, что я просто пользователь и не получаю разрешения на запись на сервер. Однако, если я выполняю импорт вручную, он будет успешным. Обычно для импорта будет четыре этапа. Однако после первого шага вы увидите, что произошла ошибка. Мой код приведен ниже наряду с сообщением об ошибке я получаю:Ошибка при отправке файла с помощью 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 из 4: Загрузить файл - Завершена Microsoft ошибки JET Database Engine «80004005» Не могу Обновить. База данных или объект доступны только для чтения. /phone/Imports/Employee/ImportFile.asp, строка 155

+1

Я думаю, что нет необходимости нажимать на входной файл. Вместо fireEvent нажмите importBtn. Но, не имея доступа к реальной странице, я могу только догадываться, что происходит не так. – RBRi

+0

Проблема была в том, что я не объявлял importBtn как HtmlPage, поэтому он не загружал новую страницу после отправки importBtn. Спасибо за совет! – duffanpj

ответ

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()); 
Смежные вопросы