2012-09-05 30 views
5

Tôi đang cố sử dụng WebDriver để điều hướng qua trang web https và tải xuống tệp bằng WebDriver. Khi tôi làm như thế này, hộp thoại tải xuống tệp xuất hiện.Tải xuống tệp bằng HTTP trong WebDriver

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

Tôi tự hỏi có cách nào chỉ gọi một phương thức trong WebDriver để tải xuống tệp bằng yêu cầu https thường xuyên mà không mô phỏng nhấp chuột không?

Xin cảm ơn trước.

Trả lời

8

Không có, ít nhất là không có cách nào hoạt động trong tất cả các trình duyệt. Bạn có thể cấu hình một số trình duyệt (Firefox và Chrome) để tải các tệp xuống một vị trí được chỉ định mà không cần nhắc. Tuy nhiên, đối với một cái gì đó giống như những gì bạn đang hỏi về, bạn không cần Selenium cả. Bất kỳ ứng dụng HTTP chương trình nào cũng sẽ thực hiện. Trong Java, tôi khuyên bạn nên xem HttpClient từ Apache; trong .NET bằng cách sử dụng HttpWebRequest sẽ hoàn thành công việc. Lưu ý rằng nếu trang web bạn đang tải xuống tệp yêu cầu xác thực, bạn có thể cần chỉ định tiêu đề tùy chỉnh trong yêu cầu HTTP của mình.

Là một lưu ý phụ, bạn có thể muốn đánh giá lại lý do tại sao bạn cho rằng bạn cần thử nghiệm tải xuống tệp, nếu nó không đơn giản như thực hiện yêu cầu HTTP bên ngoài trình duyệt. This article thảo luận vấn đề một cách chi tiết và cung cấp lý lẽ rất hợp lý lý do tại sao việc thử nghiệm tải xuống tệp là có vấn đề và thường không cần thiết.

+0

Cảm ơn, nhưng tôi cần phải đăng nhập đầu tiên và sau đó nhận được đến trang download và thu thập dữ liệu URL. Lượt truy cập trực tiếp vào URL sẽ không hoạt động do quá trình ủy quyền. – zsong

+2

Để tải xuống Socratic một lúc, trình duyệt tải xuống tệp bằng cách sử dụng HTTP như thế nào? Trong nhiều trường hợp, quá trình xác thực đặt một cookie chứa thông tin xác thực, sau đó được truyền trong các tiêu đề của yêu cầu HTTP. May mắn thay, các thư viện máy khách HTTP thường cho phép bạn kiểm soát các tiêu đề yêu cầu HTTP, vì vậy tất cả những gì bạn cần là thông tin cookie. Tôi sẽ chỉnh sửa câu trả lời của mình để giải quyết vấn đề, vấn đề không được đề cập trong câu hỏi gốc. – JimEvans

+1

Tôi tò mò về downvote cho câu trả lời này. Nó không chính xác ở cấp độ kỹ thuật. Giọng của nó không bị viêm. Nó có thể không phải là những gì bạn muốn nghe, nhưng nó không làm giảm tính hữu ích hoặc tính chính xác của câu trả lời. Nếu downvoters sẽ để lại ý kiến ​​như là nơi mà họ nghĩ rằng những thiếu sót trong câu trả lời, nó có thể được cải thiện. Việc rút gọn đơn giản mà không có bất kỳ phản hồi nào khác không hữu ích, cho người trả lời hoặc những người đến sau đó để tìm câu trả lời cho cùng một câu hỏi hoặc tương tự. – JimEvans

6

Có thể. Bạn cần thiết lập hồ sơ trên Chrome tùy chỉnh:

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

Nó sẽ không nhắc bất kỳ hộp thoại nào. Tôi có câu trả lời chi tiết hơn về cách thiết lập thư mục tải xuống và xác thực rằng tệp có kích thước bất kỳ là here.

chromedriver tắc bổ sung có thể được tìm thấy ở đây: http://peter.sh/experiments/chromium-command-line-switches/