2012-09-05 4 views
5

WebDriver를 사용하여 https 사이트를 탐색하고 WebDriver를 사용하여 파일을 다운로드하려고합니다. 이렇게하면 파일 다운로드 대화 상자가 나타납니다.WebDriver에서 HTTP를 사용하여 파일 다운로드

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

WebDriver에서 메서드를 호출하여 클릭을 시뮬레이트하지 않고 일반 https 요청을 사용하여 파일을 다운로드하는 방법이 궁금합니다.

미리 감사드립니다.

답변

8

적어도 모든 브라우저에서 작동하는 방법은 없습니다. 일부 브라우저 (Firefox 및 Chrome)에서 메시지를 표시하지 않고 지정된 위치에 파일을 다운로드하도록 구성 할 수 있습니다. 그러나, 당신이 요구하는 것과 같은 것을 위해, 당신은 셀레늄을 전혀 필요로하지 않습니다. 모든 프로그래밍 방식의 HTTP 클라이언트가 수행합니다. Java에서는 Apache의 HttpClient를 살펴 보는 것이 좋습니다. .NET에서 HttpWebRequest를 사용하면 작업이 완료됩니다. 파일을 다운로드하는 사이트에서 인증이 필요한 경우 HTTP 요청에 맞춤 헤더를 지정해야 할 수 있습니다.

참고로 브라우저 외부에서 HTTP 요청을 실행하는 것처럼 간단하지 않은 경우 파일 다운로드를 테스트해야한다고 생각하는 이유를 재검토하고 싶을 수 있습니다. This article은이 문제에 대해 자세히 설명하고 파일 다운로드 테스트가 문제가되며 종종 불필요한 이유에 대해 아주 잘 설명 된 논증을 제공합니다.

+0

감사합니다,하지만 난 먼저 로그인 한 후 다운로드 페이지로 이동하여 URL을 크롤링해야합니다

추가 chromedriver 스위치는 여기에서 찾을 수 있습니다. 권한 부여 프로세스로 인해 URL로 직접 이동하면 작동하지 않습니다. – zsong

+2

잠시 동안 Socratic을 사용하려면 브라우저가 HTTP 만 사용하여 파일을 어떻게 다운로드합니까? 대부분의 경우 인증 프로세스는 인증 정보가 포함 된 쿠키를 설정 한 다음 HTTP 요청의 헤더에 전달합니다. 다행히 HTTP 클라이언트 라이브러리는 대개 HTTP 요청 헤더에 대한 제어 수단을 제공하므로 쿠키 정보 만 있으면됩니다. 나는 원래의 질문에서 언급되지 않은 문제를 해결하기 위해 나의 대답을 편집 할 것이다. – JimEvans

+1

나는이 대답에 대한 downvote에 대해 궁금합니다. 기술 수준에서는 정확하지 않습니다. 그 색조는 선동적이지 않습니다. 당신이 듣기를 원하는 것은 아니지만 대답의 유용성이나 정확성을 떨어 뜨리지는 않습니다. 만약 downvoters가 대답에 결함이 있다고 생각하는 부분에 대한 의견을 남기면 개선 될 수 있습니다. 다른 피드백없이 단순히 downvoting하는 것은 응답자에게나 또는 이후에 오는 응답자에게 동일하거나 유사한 질문에 대한 답을 찾는 데 도움이되지 않습니다. – JimEvans

6

가능합니다. 사용자 정의 Chromedriver 프로파일을 설정해야합니다.

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

대화 상자를 표시하지 않습니다. 다운로드 디렉토리를 설정하고 파일의 크기가 here인지 확인하는 방법에 대해보다 자세한 답변을 얻었습니다. http://peter.sh/experiments/chromium-command-line-switches/