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.

0 ответов

Другие вопросы по тегам