tutorial chrome selenium selenium-webdriver

chrome - Cómo descargar cualquier archivo y guardarlo en la ubicación deseada con Selenium Webdriver



selenium webdriver python (7)

Tengo que realizar la siguiente tarea usando Selenium Webdriver que figura a continuación.

  1. Haga clic en cualquier enlace / botón que comience a descargar cualquier archivo (el tipo de archivo puede ser cualquier imagen, pdf, jar, etc.)
  2. Haga clic en "Guardar" en la ventana emergente si aparece (por ejemplo, en el caso de http://selenium.googlecode.com/files/selenium-server-standalone-2.33.0.jar )
  3. Proporcione la ubicación deseada para guardar ese archivo.

¿Alguien puede compartir, cómo podemos implementar esto usando Java?


Creo que estás buscando algo como esto

//common to all the cases FirefoxProfile prof = new FirefoxProfile(); //Case:1 - Use this case to set download this code to your browser''s default location //prof.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/zip"); //Case:2 - Download file to Desktop //prof.setPreference("browser.download.folderList", 0); //prof.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/zip"); //Case:3 - Download to custom folder path. Replace d://selenium with your Download Location prof.setPreference("browser.download.dir","D://selenium//"); prof.setPreference("browser.download.folderList", 2); prof.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/zip"); //This will work for all cases mentioned above WebDriver driver = new FirefoxDriver(prof); driver.get("http://docs.seleniumhq.org/download/"); driver.findElement(By.xpath("//tr[1]/td[4]/a[text()=''Download'']")).click();


En caso de que esté utilizando Java y Chromdriver, desarrollé una library que facilitará mucho más sus descargas.

Entre sus características, puede establecer su directorio de descarga en una línea de código y verificar que su archivo se descargó correctamente:

@Test void downloadAttachTest() throws InterruptedException { adamInternetPage.navigateToPage(driver); seleniumDownloadKPI.fileDownloadKPI( adamInternetPage.getFileDownloadLink(), "SpeedTest_16MB.dat"); waitBeforeClosingBrowser(); }


La ventana emergente de diálogo Cancelar / Guardar puede estar apareciendo porque el sitio le está enviando un tipo MIME diferente.

Verifique el contenido del encabezado real.

Utilizando Firefox incorporado en las herramientas de desarrollo, haga clic con el botón derecho para inspeccionar el enlace elemento / descarga su publicación y luego eche un vistazo al monitor de red para ver el valor del encabezado ContentType devuelto ... Ese sería el que desea utilizar ...

Establezca los ajustes de su perfil en consecuencia

firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/octet-stream,text/csv");

Esperaba "text / csv"; sin embargo, obtuve "application / octet-stream" una vez que se agregó a la lista de tipos aceptados, todo funcionó como se esperaba, sin ventanas emergentes.


No podrá acceder al cuadro de diálogo de guardar. Eso es controlado por el sistema operativo. Lo único que realmente podrá hacer es establecer la ubicación de descarga predeterminada para el navegador y permitir que descargue automáticamente los archivos. Luego revisa el archivo en Java.

Debe verificar esta respuesta de esta pregunta SO anterior . Básicamente, al configurar su perfil de Firefox, agrega una llamada para establecer la propiedad browser.helperApps.neverAsk.saveToDisk en una lista de tipos MIME separados por comas para descargar siempre:

firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk","text/csv");

Vea este artículo de Mozilla KB FAQ sobre About: configs.

ACTUALIZAR Parece que esto ahora puede ser posible ver esta respuesta en otra pregunta


Puede usar el siguiente código para guardar el archivo en la ubicación requerida.

package popups; import java.util.concurrent.TimeUnit; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.firefox.FirefoxOptions; import org.openqa.selenium.firefox.FirefoxProfile; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; public class FileDownloadPopup { WebDriver driver; FirefoxProfile prof = new FirefoxProfile(); FirefoxOptions options = new FirefoxOptions(); @BeforeMethod public void setEnvi() { System.setProperty("webdriver.gecko.driver", "E://Selenium Dependencies//BrowserExecutables//geckodriver_win64_v0.21.0.exe"); prof.setPreference("browser.download.dir","E://Downloads"); prof.setPreference("browser.download.folderList", 2); prof.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); options.setProfile(prof); driver = new FirefoxDriver(options); driver.get("http://file-examples.com/index.php/sample-documents-download/sample-xls-download/"); driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS); } @Test public void FDPP() { driver.findElement(By.xpath("(//a[text()=''Download sample xlsx file''])[1]")).click(); } @AfterMethod public void closeEnvi() { driver.close(); } }


Una posible solución es obtener la URL del archivo a través de Selenium, crear una conexión (no de Selenio), copiar las cookies de Selenium a la conexión (si es necesario) y descargar el archivo. La mayoría de los idiomas tienen API (o bibliotecas) para realizar solicitudes HTTP. Por ejemplo, para lograr esto en Java, podría usar URL.openConnection() :

String link = linkElement.getAttribute("href"); URL url = new URL(link); HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); httpURLConnection.setRequestMethod("GET");

Es posible que deba copiar las cookies que tiene Selenium para imitar al usuario de Selenium (por ejemplo, si está probando un sitio web que requiere un inicio de sesión).

Set<Cookie> cookies = webDriver.manager().getCookies(); String cookieString = ""; for (Cookie cookie : cookies) { cookieString += cookie.getName() + "=" + cookie.getValue() + ";"; } httpURLConnection.addRequestProperty("Cookie", cookieString);

Luego puede usar HttpURLConnection.getInputStream() para escribir el contenido del archivo en su ubicación preferida.

try (InputStream in = httpURLConnection.getInputStream()) { Files.copy(in, new File("/path/to/file.ext").toPath(), StandardCopyOption.REPLACE_EXISTING); }

Aunque este método sería diferente para diferentes lenguajes de programación, funciona igual para todos los navegadores .


String path="D:/xyz/abc/"; FirefoxOptions profile = new FirefoxOptions(); profile.addPreference("browser.download.folderList", 2); profile.addPreference("browser.download.manager.showWhenStarting", false); profile.addPreference("browser.download.dir", **path**); profile.addPreference("browser.helperApps.neverAsk.openFile","text/csv,application/x-msexcel,application/excel,application/x-excel,application/vnd.ms-excel,image/png,image/jpeg,text/html,text/plain,application/msword,application/xml"); profile.addPreference("browser.helperApps.neverAsk.saveToDisk","text/csv,application/x-msexcel,application/excel,application/x-excel,application/vnd.ms-excel,image/png,image/jpeg,text/html,text/plain,application/msword,application/xml"); profile.addPreference("browser.helperApps.alwaysAsk.force", false); profile.addPreference("browser.download.manager.alertOnEXEOpen", false); profile.addPreference("browser.download.manager.focusWhenStarting", false); profile.addPreference("browser.download.manager.useWindow", false); profile.addPreference("browser.download.manager.showAlertOnComplete", false); profile.addPreference("browser.download.manager.closeWhenDone", false); new FirefoxDriver(profile);