2013-05-25 16 views
24

Tôi phải thực hiện tác vụ sau bằng Trình quản lý Web Selenium được đưa ra dưới đây.Cách tải xuống bất kỳ tập tin nào và lưu nó vào vị trí mong muốn bằng cách sử dụng Selenium Webdriver

  1. Bấm vào bất kỳ liên kết/nút bắt đầu tải về bất kỳ tập tin (filetype có thể là hình ảnh bất cứ điều gì, pdf, jar vv)
  2. Bấm vào "Save" trên cửa sổ bật lên nếu xuất hiện (ví dụ như trong trường hợp của http://selenium.googlecode.com/files/selenium-server-standalone-2.33.0.jar)
  3. Cung cấp cho vị trí mong muốn để lưu tệp đó.

Bất kỳ ai cũng có thể chia sẻ, chúng ta có thể triển khai điều này bằng cách sử dụng Java như thế nào?

+0

Bạn có thể sử dụng AutoIt cách khác để làm điều này rất trơn tru mà không thay đổi hoặc đề cập đến bất kỳ cấu hình hoặc thuộc tính tập tin, bạn có thể refere trả lời của tôi đến [bài tương tự] (https://stackoverflow.com/questions/27789023/ tương tác-với-pop-up-hộp-sử dụng-selenium-in-python/45323191 # 45323191) – eaccmk

+0

Câu hỏi liên quan ở đây: https://stackoverflow.com/questions/18439851/downloading-file-using-selenium – stiemannkj1

Trả lời

19

Bạn sẽ không thể truy cập hộp thoại lưu. Đó là điều khiển bởi hệ điều hành. Điều duy nhất bạn thực sự có thể làm là đặt vị trí tải xuống mặc định cho trình duyệt và cho phép nó tự động tải xuống các tệp. Sau đó kiểm tra tệp trong Java.

Bạn nên kiểm tra this answer từ this previous SO question. Về cơ bản khi thiết lập Firefox của bạn, quý khách thêm một cuộc gọi đến thiết lập thuộc tính browser.helperApps.neverAsk.saveToDisk để một dấu phẩy tách ra danh sách các loại MIME để luôn tải về:

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

Xem this Mozilla KB FAQ article vào About: configs.

CẬP NHẬT Nó trông như thế này bây giờ có thể có thể see this answer in another question

+3

có thể truy cập lưu hộp thoại bạn có thể sử dụng lớp robot cho rằng để truy cập và thực hiện các sự kiện như ENTER, TABS và ESCAPE bằng cách sử dụng lớp robot – Luffy

+1

@Luffy, cảm ơn. Tôi thấy bạn đã đăng câu trả lời trong một câu hỏi khác. Điều này là không thể khi tôi lần đầu tiên trả lời câu hỏi này. Tôi đã cập nhật câu trả lời để tham khảo giải pháp của bạn. – Dirk

+0

Chào mừng. Cảm ơn bạn đã cập nhật câu trả lời .... – Luffy

1

Tôi nghĩ rằng bạn đang tìm kiếm một cái gì đó như thế này

//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(); 
7

Các Hủy/Save đối thoại bật lên có thể xuất hiện bởi vì trang web là gửi cho bạn một loại MIME khác.

Kiểm tra nội dung tiêu đề thực tế.

Sử dụng firefox được tích hợp sẵn trong Công cụ dành cho nhà phát triển, Nhấp chuột phải để kiểm tra phần tử/liên kết tải xuống mà bạn đăng bài, sau đó hãy xem màn hình Mạng để xem giá trị tiêu đề ContentType được trả lại .. Đó là thứ bạn muốn sử dụng ..

enter image description here

Đặt cài đặt cấu hình của bạn cho phù

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

tôi đã mong đợi "text/csv "Tuy nhiên có 'application/octet-stream' một khi đã được bổ sung vào các loại chấp nhận liệt kê tất cả làm việc như mong đợi, Không có quảng cáo

+1

Wow cảm ơn vì đã nhấn mạnh thực tế là người ta phải thực sự kiểm tra NỘI DUNG HEADER thực tế. Vì tệp tôi đang tải xuống là csv, tôi nghĩ nó nên là 'text/csv' nhưng cậu bé đã sai. Trong trường hợp của tôi, nó không phải là 'application/octet-stream' như trong trường hợp của bạn, mà là' application/csv'. Cảm ơn! – mkab

1

Một giải pháp tiềm năng là để có được URL cho các tập tin thông qua Selenium, tạo ra một (không phải Selenium) kết nối, sao chép cookie của Selenium để kết nối (nếu cần), và tải xuống tệp. Hầu hết các ngôn ngữ đều có API (hoặc thư viện) để thực hiện các yêu cầu HTTP.Ví dụ, để thực hiện điều này trong Java, bạn có thể sử dụng URL.openConnection()HttpURLConnection.getInputStream():

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

// You may need to copy over the cookies that Selenium has in order 
// to imitate the Selenium user (for example if you are testing a 
// website that requires a sign-in). 
Set<Cookie> cookies = browserDriver.getBrowserCookies(); 
String cookieString = ""; 

for (Cookie cookie : cookies) { 
    cookieString += cookie.getName() + "=" + cookie.getValue() + ";"; 
} 

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

Phương pháp này sẽ khác nhau cho các ngôn ngữ lập trình khác nhau, nhưng nó sẽ làm việc như nhau cho tất cả các trình duyệt.

0
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);