Ajax-запросы не работают в Selenium Firefox с Python во время настраиваемого центра сертификации
Я хочу протестировать веб-приложения, размещенные в нашей компании, которые используют сертификаты tls из нашего внутреннего центра сертификации. Обычно я бы добавил ЦС в хранилище сертификатов браузеров, но, похоже, это невозможно напрямую в Selenium без использования существующего профиля. Этого следует избегать, чтобы при каждом тесте была чистая среда.
Поэтому я попытался найти обходные пути, принимая ненадежные сертификаты. Есть несколько способов сделать это в драйвере Firefox, напримерcapabilities['acceptInsecureCerts'] = True
. Хотя это работает для загрузки страницы на селен, используяdriver.get()
, похоже, вызывает проблемы с запросами Ajax.
Примером является HCL Connections 6.5. Панель управления сообщества в Selenium выглядит так:
Вы видите сообщение об ошибке и все виджеты, загруженные с помощью ajax (форумы, закладки, ..), пусты. Это должно быть вызвано проблемой доверия TLS: я импортировал наш корневой ЦС в хранилище сертификатов экземпляра Selenium как корневой ЦС. После перезагрузки все виджеты присутствуют, и сообщение об ошибке исчезло.
Как я могу это исправить, чтобы запросы ajax с использованием настраиваемого центра сертификации работали в Selenium?
Мой основной код:
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from os.path import expanduser
options = Options()
profile = webdriver.FirefoxProfile()
capabilities = webdriver.DesiredCapabilities().FIREFOX.copy()
capabilities['acceptInsecureCerts'] = capabilities['acceptSslCerts'] = True
geckodriver = f"{expanduser('~')}/Downloads/geckodriver"
driver = webdriver.Firefox(
options=options, executable_path=geckodriver, firefox_profile=profile, firefox_options=options, capabilities=capabilities)
driver.get("https://cnx65-test.internal/communities/service/html/communitystart?communityUuid=0e00eeab-a38f-4404-9ba4-2414be8d8c7f")
Вместо того acceptInsecureCerts
а также acceptSslCerts
Я тоже пробовал
-
profile.accept_untrusted_certs = True
- Настройка
capabilities['acceptSslCerts'] = True
только (безacceptInsecureCerts
): Ошибка "Невозможно отобразить виджеты" исчезла, но все виджеты по-прежнему пусты. profile.accept_untrusted_certs = True
такой же
К сожалению, все они не решают проблему с ajax для виджетов. Я использую Python 3.7.
Обходной путь: использование хрома
Я пробовал Chromium со следующим кодом:
options = webdriver.ChromeOptions()
options.add_argument('ignore-certificate-errors')
chromedriver = "/snap/bin/chromium.chromedriver"
driver = webdriver.Chrome(chromedriver, chrome_options=options)
driver.get("https://cnx65-test.internal/communities/service/html/communitystart?communityUuid=0e00eeab-a38f-4404-9ba4-2414be8d8c7f")
В Chromium он работает с ignore-certificate-errors
аргумент, который является временным решением. Но это не решение, так как мне лучше использовать Firefox.