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