Обработка окна предупреждения "Требуется аутентификация" с помощью Python 2.7 + Selenium Webdriver

У меня проблема с безопасным URL:

Открытие URL-адреса создает окно предупреждения "Требуется аутентификация" с полями имени пользователя и пароля.

Я довольно новичок в Selenium Webdriver и Python. Я не знаком с обработкой оповещений и в настоящее время вручную вводю учетные данные, пока не смогу это выяснить. Я уже пытался добавить свое имя пользователя / пароль в URL. Это не работает для меня.

Может ли кто-нибудь указать мне направление ввода ключей в поля имени пользователя и пароля в окне предупреждения?

6 ответов

Решение

Спасибо за все ответы. К сожалению, ни одно из этих решений не помогло мне. Я подозреваю, что это может быть связано с созданием нового профиля каждый раз, когда firefox открывается webdriver.

Мой обходной путь: я изменил драйвер с Firefox на IE после установки 32-битного драйвера IE ( http://selenium-release.storage.googleapis.com/index.html?path=2.44/). Это решило мою проблему, больше не создавая окно предупреждения и позволяя мне продолжить мой тест.

Не могли бы вы попробовать использовать клавиши для вкладки в оповещении?

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.alert import Alert
from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Firefox()
driver.get('http://www.url.com/')
wait(driver, 5).until(EC.alert_is_present())
alert = driver.switch_to_alert()
alert.send_keys('username')
alert.send_keys(Keys.TAB)
alert.send_keys('password')
alert.accept()

В случае такой аутентификации вам необходимо передать имя пользователя и пароль на сервер при доступе к странице, чтобы избежать окна аутентификации (которое недоступно для селена)

Предположим, что URL, к которому вы пытаетесь получить доступ: http://example.com/

вам нужно будет получить доступ к этому URL с учетными данными, такими как:

driver.get('http://username:password@example.com')

где username ваше имя пользователя и password это ваш пароль для сайта.

Ни один из ответов раньше не помог с моей ситуацией. Веб-сайт, на котором я выполняю аутентификацию, использует единый вход, из-за которого возникают проблемы при использовании имени пользователя:password@ website.com

В окне аутентификации необходимо ввести два поля: имя пользователя и пароль.Окно аутентификации

Чтобы решить эту проблему, отправьте имя пользователя и пароль за один раз в окно предупреждения.

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.alert import Alert

def login(self):
    self.browser = webdriver.Firefox()
    self.browser.get(r'websitelogin.com')
    wait(self.browser, 1).until(expected_conditions.alert_is_present())

    # "Switch" to the Alert browser
    alert = Alert(self.browser)

    # Send the username, TAB then password all in one go using a python f string
    alert.send_keys(f'username{Keys.TAB}password')
    alert.accept()

У меня были подобные проблемы, когда добавление моего имени пользователя / пароля в URL не работало для меня. Это произошло потому, что Firefox предупредил меня с помощью окна подтверждения, требующего от меня подтвердить, что я хочу войти на сайт с указанным именем пользователя. Следующее решило эту проблему:

from selenium import webdriver

driver = webdriver.Firefox()
driver.get('https://<username>:<password>@<site-needing-auth>.com')
alert = driver.switch_to_alert()
alert.accept()

У меня были те же проблемы, что и у вас, пока я не заметил, что просто забыл написать: "https" вместо просто http. Если вы добавите "S", для меня это было сделано!

Итак, в коде, возможно, вы хотите попробовать:

driver.get('https://username:password@domain-name.org')

Приведенный ниже код Python может помочь загрузить такой URL-адрес с запросом на аутентификацию в предупреждении JavaScript Popup, я также застрял здесь надолго. Это из-за того, что драйвер Chrome не разрешит такие методы аутентификации после обновления 59 (вероятно). Все еще существуют бэкдоры через Selenium, использующие движок JavaScript в браузере для загрузки таких URL-адресов.

driver.get("https://www.google.com")
URL = "https://{username}:{password}@www.example.com"
driver.executeScript("window.open('"+URL+"')")
Другие вопросы по тегам