Использование расширений с селеном (Python)

В настоящее время я использую Selenium для запуска экземпляров Chrome для проверки веб-страниц. Каждый раз, когда мой script запускается, запускается чистый экземпляр Chrome (очистка от расширений, закладок, истории просмотров и т.д.). Мне было интересно, можно ли запустить мой script с расширениями Chrome. Я попытался найти пример Python, но ничего не получилось, когда я искал это.

Ответ 1

Вы должны использовать параметры Chrome WebDriver , чтобы задать список загружаемых расширений. Вот пример:

import os
from selenium import webdriver
from selenium.webdriver.chrome.options import Options


executable_path = "path_to_webdriver"
os.environ["webdriver.chrome.driver"] = executable_path

chrome_options = Options()
chrome_options.add_extension('path_to_extension')

driver = webdriver.Chrome(executable_path=executable_path, chrome_options=chrome_options)
driver.get("http://stackoverflow.com")
driver.quit()

Надеюсь, это поможет.

Ответ 2

Главный ответ не сработал для меня, потому что я не понимал, что вам нужно указать параметры webdriver в .zip файл.

Т.е. chrome_options.add_extension('path_to_extension_dir') не работает.
Вам нужно: chrome_options.add_extension('path_to_extension_dir.zip')

Выяснив это и прочитав пару сообщений о том, как создать zip файл через командную строку и загрузить его в selenium, единственный способ, которым это сработало для меня, - это заархивировать мои файлы расширений в рамках одного и того же сценария python. Это действительно оказалось хорошим способом автоматического обновления любых изменений, которые вы могли бы внести в расширение:

import os, zipfile
from selenium import webdriver

# Configure filepaths
chrome_exe = "path/to/chromedriver.exe"
ext_dir = 'extension'
ext_file = 'extension.zip'

# Create zipped extension
## Read in your extension files
file_names = os.listdir(ext_dir)
file_dict = {}
for fn in file_names:
    with open(os.path.join(ext_dir, fn), 'r') as infile:
        file_dict[fn] = infile.read()

## Save files to zipped archive
with zipfile.ZipFile(ext_file), 'w') as zf:
    for fn, content in file_dict.iteritems():
        zf.writestr(fn, content)

# Add extension
chrome_options = webdriver.ChromeOptions()
chrome_options.add_extension(ext_file)

# Start driver
driver = webdriver.Chrome(executable_path=chrome_exe, chrome_options=chrome_options)
driver.get("http://stackoverflow.com")
driver.quit()