2012-09-05 38 views
5

Estoy tratando de usar el WebDriver para navegar a través de un sitio https y descargar un archivo usando WebDriver. Cuando lo hice así, apareció el cuadro de diálogo de descarga de archivos.Descargar un archivo usando HTTP en WebDriver

WebDriver driver = new ChromeDriver(); 
driver.get("http://xxx/file1.txt"); 

Me pregunto ¿hay alguna manera simplemente llamar a un método en el WebDriver para descargar el archivo usando solicitud HTTPS regulares sin simular el clic?

Gracias de antemano.

Respuesta

8

No hay, al menos, ninguna manera que funcione en todos los navegadores. Es posible que pueda configurar algunos navegadores (Firefox y Chrome) para descargar archivos a una ubicación específica sin preguntar. Sin embargo, para algo como lo que preguntas, no necesitas Selenium en absoluto. Cualquier cliente HTTP programático lo hará. En Java, recomiendo mirar HttpClient desde Apache; en .NET usando una HttpWebRequest hará el trabajo. Tenga en cuenta que si el sitio del que está descargando el archivo requiere autenticación, es posible que deba especificar encabezados personalizados en su solicitud HTTP.

Como nota al margen, es posible que desee volver a evaluar por qué cree que necesita para probar la descarga de un archivo, si no es tan simple como ejecutar una solicitud HTTP fuera del navegador. This article discute el problema en gran detalle, y proporciona un argumento muy bien razonado por qué la prueba de descarga de un archivo es problemática y, a menudo innecesario.

+0

Gracias, pero que entrar primero y luego ir a la página de descarga y rastrear la URL. Golpear directamente a la URL no funcionará debido al proceso de autorización. – zsong

+2

Para obtener Soratic por un momento, ¿cómo descarga el navegador el archivo usando solo HTTP? En muchos casos, el proceso de autenticación establece una cookie que contiene información de autenticación, que luego se pasa en los encabezados de la solicitud HTTP. Afortunadamente, las bibliotecas de clientes HTTP generalmente le permiten controlar el tamaño de los encabezados de las solicitudes HTTP, por lo que todo lo que necesita es la información de las cookies. Editaré mi respuesta para abordar el problema, que no se mencionó en la pregunta original. – JimEvans

+1

Tengo curiosidad sobre el voto a favor de esta respuesta. No es incorrecto a nivel técnico. Su tono no es inflamatorio. Puede que no sea lo que quieres escuchar, pero no disminuye la utilidad o la corrección de la respuesta. Si los detractores dejaran comentarios sobre dónde creen que están las deficiencias en la respuesta, podrían mejorar. Simplemente la votación negativa sin ningún otro comentario no es útil, ni para el que responde ni para quienes vienen después a encontrar una respuesta a la misma pregunta o a una pregunta similar. – JimEvans

6

Sí, puedes. Necesita configurar un perfil de Chromedriver personalizado:

profile = Selenium::WebDriver::Chrome::Profile.new 
profile['download.prompt_for_download'] = false 
profile['download.default_directory'] = download_directory 

No aparecerá ningún cuadro de diálogo. Tuve una respuesta más detallada sobre cómo configurar el directorio de descarga y validar que el archivo es de cualquier tamaño here.

interruptores chromedriver adicionales se pueden encontrar aquí: http://peter.sh/experiments/chromium-command-line-switches/

Cuestiones relacionadas