【问题标题】:Selenium Chrome: Load profile and change download folder - PythonSelenium Chrome:加载配置文件并更改下载文件夹 - Python
【发布时间】:2020-08-20 07:50:18
【问题描述】:

操作系统:Win 10
铬:81.0.4044.129
ChromeDriver:81.0.4044.69

目标:
加载配置了扩展和首选项的现有配置文件指定默认下载位置。

目的:
我想将图像保存到它们各自的文件夹名称中。

挑战
如果我指定要加载的 Chrome 配置文件,则无法更改默认下载文件夹。


代码片段:

# Loading profile works!
options = webdriver.ChromeOptions()
options.add_argument(f'user-data-dir={profile_path}')
options.add_argument(f'--profile-directory={profile_name}')
driver = webdriver.Chrome(chrome_options=options)
# Changing default download location works!
options = webdriver.ChromeOptions()
prefs = {"download.default_directory" : "C:/Downloads/Folder A"}
options.add_experimental_option("prefs", prefs)
driver = webdriver.Chrome(chrome_options=options)
# This DOESN'T work! Default download location is not changed. 
options = webdriver.ChromeOptions()
options.add_argument(f'user-data-dir={profile_path}')
options.add_argument(f'--profile-directory={profile_name}')
prefs = {"download.default_directory" : "C:/Downloads/Folder A"}
options.add_experimental_option("prefs", prefs)
driver = webdriver.Chrome(chrome_options=options)


是否可以在创建驱动程序之前同时加载配置文件并更改默认下载位置?


【问题讨论】:

  • 你试过这篇文章的答案了吗? stackoverflow.com/questions/35331854/…
  • @AndreaHasani:那是代码 sn-p 2。但这不允许我加载现有配置文件。相反, sn-p 2 (以及该帖子的答案)将创建一个临时配置文件。

标签: python selenium google-chrome selenium-chromedriver


【解决方案1】:

我认为无法同时加载现有配置文件并更改 default_directory 选项。
因此,我使用json.loadsjson.dump 在加载配置文件之前修改“首选项”文件。

import json
from selenium import webdriver

# helper to edit 'Preferences' file inside Chrome profile directory.
def set_download_directory(profile_path, profile_name, download_path):
        prefs_path = os.path.join(profile_path, profile_name, 'Preferences')
        with open(prefs_path, 'r') as f:
            prefs_dict = json.loads(f.read())
        prefs_dict['download']['default_directory'] = download_path
        prefs_dict['savefile']['directory_upgrade'] = True
        prefs_dict['download']['directory_upgrade'] = True
        with open(prefs_path, 'w') as f:
            json.dump(prefs_dict, f)


options = webdriver.ChromeOptions()
set_download_directory(profile_path, profile_name, download_path) # Edit the Preferences first before loading the profile. 
options.add_argument(f'user-data-dir={profile_path}')
options.add_argument(f'--profile-directory={profile_name}')
driver = webdriver.Chrome(chrome_options=options)

【讨论】:

    猜你喜欢
    • 2019-07-01
    • 1970-01-01
    • 2014-06-24
    • 1970-01-01
    • 1970-01-01
    • 2017-12-26
    • 2014-11-04
    • 2023-03-16
    相关资源
    最近更新 更多