python + selenium webdriver: использование метода аутентификации

Я использую python + selenium webdriver для автоматизации проверок. Я застрял на веб-сайтах, которые запрашивают аутентификацию HTTP через всплывающее окно.

Я пытаюсь использовать метод «authenticate» с помощью следующего кода:

#init. driver = webdriver.Firefox() driver.get(url) #get to the auth popup window by clicking relevant link elem = driver.find_element_by_id("login_link") elem.click() #use authenticate alert method driver._switch_to.alert.authenticate("login", "password") 

(редкий) infos / doc, связанный с этим методом, указывает, что он должен предоставить учетные данные, предоставленные и подтвержденные http auth. Это не так, и я получаю следующую ошибку:

Файл «/usr/local/lib/python2.7/dist-packages/selenium/webdriver/common/alert.py», строка 105, в authenticate self.driver.execute (Command.SET_ALERT_CREDENTIALS, {'username': имя пользователя, 'password': password}) Файл "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", строка 201, в исполнении self.error_handler.check_response (response) Файл " /usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py ", строка 159, в check_response raise exception_class (значение) selenium.common.exceptions.WebDriverException: Message: Unrecognized command: POST / сессии / c30d03e1-3835-42f5-ace0-968aef486b36 / оповещения / полномочия

есть что-то, чего я здесь не вижу / есть кто-нибудь пришедший по той же проблеме и разрешил его?

PS: http: // имя пользователя: пароль @ url трюк не работает для меня в моих условиях тестирования.

  • Как установить прокси для phantomjs / ghostdriver в python webdriver?
  • Невозможно определить функциональность move_to_element для веб-сервера python selenium
  • Загрузите файл через гиперссылку в PhantomJS, используя Selenium
  • Откройте web в новой вкладке Selenium + Python
  • Selenium: исключение FirefoxProfile Не удается загрузить профиль
  • Selenium Webdriver - NoSuchElementExceptions
  • принять ssl cert с марионеткой firefox webdrive python splinter
  • Selenium WebDriver waitForElementPresent, когда Javascript обновляется
  • 2 Solutions collect form web for “python + selenium webdriver: использование метода аутентификации”

    Обычная проверка подлинности довольно проста для автоматического тестирования, без необходимости иметь дело с собственными предупреждениями / диалогами или другими различиями браузера.

    Подход, который я очень успешно использовал в мире Java, – это настроить прокси-сервер Browsermob в коде и зарегистрировать RequestInterceptor для перехвата всех входящих запросов (соответствующих шаблону хоста / URL-адреса). Если у вас есть запрос, который в противном случае потребовал бы Basic auth, добавьте HTTP-заголовок Authorization с требуемыми учетными данными (строка «Basic» + Base64-encoded «user: pass». Так что для «foo: bar» вы установили значение Basic Zm9vOmJhcg== )

    Запустите сервер, установите его как веб-прокси для трафика Selenium , и когда будет выполнен запрос, требующий проверки подлинности, прокси добавит заголовок, браузер увидит его, проверит учетные данные и не обязательно будет всплывать диалоговое окно.

    Хотя этот метод может показаться трудоемким, если автоматически задать заголовок для каждого запроса, вам не нужно явно добавлять user:pass@ на любой URL, который может понадобиться, где есть несколько путей в области аутентификации. Кроме того, в отличие от user:pass@ users, вам не нужно беспокоиться о кешировании браузера (или переходе к кешу через определенное время) заголовка или о переходе HTTP / HTTPS.

    Эта техника работает очень хорошо, но как добиться этого в Python?

    Вы можете использовать эту оболочку Python для Browsermob , которая предоставляет свой REST API в Python. Это вызов REST, который вам нужен:

    POST / proxy / [port] / headers – установка и переопределение заголовков HTTP-запросов. Например, настраивая пользовательский агент. Данные полезной нагрузки должны быть json-кодированным набором заголовков (не закодированных по URL)

    Итак, из предыдущего примера (псевдокода):

     POST localhost:8787/proxy/<proxy_port>/headers '{"Authorization": "Basic Zm9vOmJhcg=="}' 

    В качестве альтернативы вы можете увидеть этот ответ для пользовательского прокси-сервера Python с помощью Twisted.

    Обычная проверка подлинности возможна в URL-адресе, но вам нужно установить предпочтение:

     from selenium import webdriver profile = webdriver.FirefoxProfile() profile.set_preference("network.http.phishy-userpass-length", 255) driver = webdriver.Firefox(profile) driver.get("http://admin:admin@the-internet.herokuapp.com/basic_auth") 

    Если это не работает в вашем случае, это не базовая аутентификация.

    Python - лучший язык программирования в мире.