Selenium Chrome: загрузить профиль и изменить папку загрузки - Python - PullRequest
0 голосов
/ 05 мая 2020

ОС: Win 10
Chrome: 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)

Можно ли ОБЕИМ загрузить профиль и изменить место загрузки по умолчанию до создания драйвера?

1 Ответ

0 голосов
/ 06 мая 2020

Я считаю, что нет способа одновременно загрузить существующий профиль и изменить параметр default_directory.
Поэтому вместо этого я использовал json.loads и json.dump, чтобы изменить файл 'Preference' перед загрузкой профиль.

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)

...