2017-01-05 8 views
0

Ich versuche derzeit, den Upload einer Datei auf eine bestimmte Website zu automatisieren. Ich kann mich erfolgreich auf der Website anmelden und zur Importseite navigieren. Wenn ich jedoch versuche, die Datei zu importieren, erhalte ich einen Fehler. Meine Vermutung ist, dass es daran liegt, dass ich einfach ein Benutzer bin und keine Berechtigungen zum Schreiben auf den Server erhalten habe. Wenn ich den Import manuell durchführe, ist es jedoch erfolgreich. Normalerweise würde es vier Stufen zum Import geben. Nach dem ersten Schritt können Sie jedoch feststellen, dass ein Fehler aufgetreten ist. Mein Code unten zusammen mit dem Fehler aufgelistet Ich erhalte:Fehler beim Hochladen der Datei mit 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()); 

    } 

Der Fehler Ich erhalte:

Stufe 1 von 4: Datei hochladen - Abgeschlossene Microsoft Jet Database Engine Fehler '80004005' kann nicht aktualisieren. Datenbank oder Objekt ist schreibgeschützt. /phone/Imports/Employee/ImportFile.asp, Zeile 155

+1

Ich denke, es gibt keine Notwendigkeit, auf die Eingabedatei zu klicken. Klicken Sie anstelle von fireEvent auf den ImportBtn. Aber ohne Zugriff auf die richtige Seite kann ich nur raten, was falsch läuft. – RBRi

+0

Das Problem war, dass ich das importBtn nicht als HTML-Seite deklariert hatte, so dass es die neue Seite nicht geladen hat, nachdem das importBtn übergeben wurde. Danke für den Ratschlag! – duffanpj

Antwort

0

Ich habe eine Lösung gefunden und wollte es für diejenigen veröffentlichen, die es in der Zukunft nützlich finden könnten. Das Problem war, dass ich einfach versuchte, mit der URL auf die Import-Seite umzuleiten. Prior hatte ich versucht, die Formulare mit einer importBtn.click() Aussage einzureichen; Allerdings musste ich diese Anweisung als eigene HtmlPage-Variable deklarieren.

  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()); 
Verwandte Themen