2017-10-16 2 views
0

J'essaie de me connecter à une page Web et de télécharger un fichier. Après avoir cherché un moment, j'ai trouvé une solution qui utilise du sélénium. Le code HTML de la page ressemble à ceci:Téléchargement d'un fichier sur un site php en utilisant java

<html> 
    <head><title>some title</title></head> 
    <body> 
    <h1>upload</h1> 
     upload your file<br> 
     <form action="hx2.php" method="post" enctype="multipart/form-data"> 
      <input type="hidden" name="action" value="upload"> 
      <input type="hidden" name="debug" value=""> 
      <input type="file" name="filename"> 
      <input type="submit" value="Datei senden"> 
      <input type="reset"> 
     </form> 
     </body> 
</html> 

et le code java utilisé pour connecter la page et télécharger mon fichier:

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.firefox.FirefoxDriver; 

public class Example_1 { 
    public static final String BASEURL = "somesite.de/"; 
    private static WebDriver driver; 
    public static void main(String[] args) { 
     String geckoPath = "C:\\...\\gecko\\geckodriver.exe"; 
     System.setProperty("webdriver.gecko.driver",geckoPath); 
     driver = new FirefoxDriver(); 
     loginAndUpload("uname", "pwd","C:\\...\\myFile.xml");   
    } 
    public static void loginAndUpload(String uname, String pwd, String filePath){ 
     String URL = "http://" + uname + ":" + pwd + "@" + BASEURL; 
     driver.get(URL); 

     driver.findElement(By.name("filename")).sendKeys(filePath); 

     driver.findElement(By.cssSelector("input[type=submit]")).click(); 
     driver.findElement(By.name("tan")).sendKeys("123"); 

     driver.findElement(By.cssSelector("input[type=submit]")).click(); 

     System.out.println(driver.getPageSource().contains("successful")?"successfully uploaded":"upload not successful"); 
     driver.quit(); 
    } 
} 

Pour faire ce travail que je devais télécharger le geckodriver .exe et ajoutez 3 fichiers jar externes. De plus, comme je suis nouveau au sélénium, j'ai essayé de lire quelque chose à ce sujet et j'ai découvert qu'il s'agit d'un cadre de test logiciel. Donc, ma question est la suivante: est-ce une bonne façon de télécharger des fichiers ou est-ce que je me trompe de sélénium? Si oui, existe-t-il un moyen plus simple/plus simple de se connecter à un site Web et de télécharger un fichier?

Répondre

1

Vous devriez donner HttpClient une chance. C'est bien documenté et il y a beaucoup d'exemples. HttpClient est une implémentation complète de toutes les méthodes HTTP (GET, POST, PUT, DELETE, HEAD, OPTIONS et TRACE) dans une structure OO extensible. De nombreux schémas d'authentification sont déjà implémentés.