14

Tôi đang sử dụng Trình quản trị web Selenium (bằng Python) để tự động tải xuống hàng nghìn tệp. Tôi muốn đặt thư mục tải xuống của Chrome theo chương trình. Sau khi đọc this, tôi đã thử điều này:đặt tùy chọn Chrome với Trình quản trị web Selenium bằng Python

chromepath = '/Users/thiagomarzagao/Desktop/searchcode/chromedriver' 
desired_caps = {'prefs': {'download': {'default_directory': '/Users/thiagomarzagao/Desktop/downloaded_files/'}}} 
driver = webdriver.Chrome(executable_path = chromepath, desired_capabilities = desired_caps) 

Không tốt. Tải xuống vẫn đi tới thư mục tải xuống mặc định ("/ Users/thiagomarzagao/Downloads").

Mọi suy nghĩ?

(Python 2.7.5, Selenium 2.2.0, Chromedriver 2.1.210398, Mac OS X 10.6.8)

Trả lời

3

Tôi nghĩ bạn cũng cần

"directory_upgrade": true 

Sử dụng từ điển trực tiếp trong Chrome Tệp 'Prefrences', trên cửa sổ cục bộ cài đặt phiên bản chrome 28.0.1500.95 m, với các tùy chọn tải xuống sau:

"download": { 
     "default_directory": "C:\\Users\\rdub\\Desktop", 
     "extensions_to_open": "" 
    }, 

Tôi nhận vị trí mặc định so với màn hình nền. Khi tôi thay đổi nó thành:

"download": { 
     "default_directory": "C:\\Users\\rdub\\Desktop", 
     "directory_upgrade": true, 
     "extensions_to_open": "" 
    }, 

Tôi nhận được vị trí máy tính để bàn.

Hãy thử như sau:

desired_caps = {'prefs': {'download': {'default_directory': '/Users/thiagomarzagao/Desktop/downloaded_files/', "directory_upgrade": true, "extensions_to_open": ""}}} 
+0

Bằng cách nào đó không hiệu quả đối với tôi. Tôi đã thêm tùy chọn "default_directory" và "extensions_to_open" vào từ điển đó trong mã của tôi, nhưng các tệp đã tải xuống vẫn chuyển đến thư mục mặc định. Tôi thậm chí đã thử cả hai '" true "' và 'True' (vì tôi không biết nếu đó là nghĩa vụ phải là một chuỗi hoặc boolean), nhưng cú pháp không làm việc. – Parzival

+0

Thật không may, việc sửa đổi tệp Tùy chọn của Chrome trực tiếp không phải là một tùy chọn đối với tôi. Vấn đề là, tôi cần đặt thư mục tải xuống trên tập lệnh Python của mình, không phải trên tệp Tùy chọn của Chrome. (Đó là bởi vì tôi sẽ cần phải có một số thư mục tải xuống khác nhau và lặp lại chúng, lưu một vài trăm tệp đã tải xuống vào mỗi thư mục). – Parzival

+0

Tôi đã không đề xuất bạn chỉnh sửa thủ công tệp, tôi chỉ sử dụng phương pháp đó làm giường thử nghiệm nhanh. Bạn đã thử đặt directory_upgrade thành true? Đó là chìa khóa cho tôi. –

34

Sau đây làm việc cho tôi:

chromeOptions = webdriver.ChromeOptions() 
prefs = {"download.default_directory" : "/some/path"} 
chromeOptions.add_experimental_option("prefs",prefs) 
chromedriver = "path/to/chromedriver.exe" 
driver = webdriver.Chrome(executable_path=chromedriver, chrome_options=chromeOptions) 

Nguồn: https://sites.google.com/a/chromium.org/chromedriver/capabilities

+0

Điều này có vẻ đầy hứa hẹn. Than ôi, cuối cùng tôi đã từ bỏ Chrome hoàn toàn và viết lại hoàn toàn mã, nhưng cuối cùng tôi sẽ quay lại và kiểm tra giải pháp của bạn. – Parzival

+0

Than ôi, tôi chỉ thử nghiệm nó và nó đã không làm việc cho tôi. Mã không sụp đổ, nó chỉ im lặng tải xuống không có gì. – Parzival

+0

Làm việc cho tôi một cách hoàn hảo. Cảm ơn! – alecxe

1

Tôi thử tất cả các anwsers trong câu hỏi này, nhưng nó không hoạt động cho tôi trong số Ubuntu 16.10. Vì vậy, tôi thêm thay đổi với os.environ cho biến số XDG_DOWNLOAD_DIR. Cái nào không hiệu quả, nhưng tôi nghĩ nó giúp ích.

Đó là:

os.environ['XDG_DOWNLOAD_DIR'] = default_download_directory 

này thực sự thay đổi điều đó công trình hoàn hảo cho tôi là thiết lập thư mục tải về thông qua lệnh xdg-user-dirs động cập nhật thông qua một cuộc gọi hệ thống trong thời gian thực hiện:

os.system("xdg-user-dirs-update --set DOWNLOAD " + default_download_directory) 

Vì vậy, tất cả mã của tôi liên quan đến thiết lập thư mục tải xuống như sau: nhập os từ selenium import w ebdriver

default_download_directory = str(os.path.dirname(os.path.abspath(__file__))) + "/download" 

os.environ['XDG_DOWNLOAD_DIR'] = default_download_directory 

os.system("xdg-user-dirs-update --set DOWNLOAD " + default_download_directory) 

desired_caps = { 
    'prefs': { 
      'download': { 
       'default_directory': str(os.path.dirname(os.path.abspath(__file__))) + "/download", 
       "directory_upgrade": "true", 
       "extensions_to_open": "" 
       } 
       } 
     } 

options = webdriver.ChromeOptions() 
options.add_argument("download.default_directory=" + str(os.path.dirname(os.path.abspath(__file__))) + "/download") 

browser = webdriver.Chrome(chrome_options=options, desired_capabilities=desired_caps) 
+0

Vì vậy, giải pháp của bạn là để đặt nó vĩnh viễn, toàn hệ thống trên máy tôi đang chạy này? Vì vậy, khi bất kỳ ứng dụng nào khác, ngay cả bên ngoài tập lệnh này muốn có thư mục tải xuống, tệp này sẽ được tập lệnh cuối cùng thiết lập, đúng không? –

+0

Bạn nói đúng, có một vấn đề lớn đặt biến là toàn hệ thống (tôi phát hiện ra các tác dụng phụ mà bạn nhận xét vài tuần trước). Một workaround có thể được lưu trữ tạm thời con đường cũ hơn và khôi phục lại sau khi kết thúc ứng dụng (và thực sự đảm bảo rằng nó được khôi phục đường dẫn nếu kịch bản thất bại hay như vậy). Nếu bạn có ý tưởng tốt hơn để tránh điều đó, tôi muốn biết điều đó;) – shakaran

4

Nếu bất kỳ ai vẫn gặp sự cố và giải pháp trên không hiệu quả, tôi đã thêm dấu gạch chéo sau ('\') vào đường dẫn tải xuống của mình.

Mine trông như thế này:

if browser == 'chrome': 
     options = webdriver.ChromeOptions() 
     options.add_argument("--start-maximized") 
     prefs = {"profile.default_content_settings.popups": 0, 
       "download.default_directory": r"C:\Users\user_dir\Desktop\\", # IMPORTANT - ENDING SLASH V IMPORTANT 
       "directory_upgrade": True} 
     options.add_experimental_option("prefs", prefs) 
     return webdriver.Chrome(executable_path=Base.chromedriver_dir, chrome_options=options) 
+0

Bạn là một ngôi sao nhạc rock. Điều này nên là câu trả lời tốt nhất –

+0

@yvesva Mục đích của việc thêm dấu gạch ngang kép - trước khi "bắt đầu tối đa hóa" là gì? – doyz

+0

@doyz Chỉ là danh pháp tiêu chuẩn mà tôi nghĩ. Đây có vẻ là một danh sách đầy đủ của họ. https://peter.sh/experiments/chromium-command-line-switches/ – yvesva

0

Đối với bất cứ ai vẫn tự hỏi tại sao thực hiện của họ không hoạt động: Bạn có phải đặt đường dẫn đầy đủ cho nó để làm việc. ví dụ.'/ Users/you/dlfolder' sẽ không hoạt động, trong khi 'C:/Users/you/dlfolder' sẽ.

Các vấn đề liên quan