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

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

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

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

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

Ответ 1

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

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

Ответ 2

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

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()

Ответ 3

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

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

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

driver.get('http://username:[email protected]')

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

Ответ 4

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

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

driver.get('https://username:[email protected]')

Ответ 5

У меня были похожие проблемы, когда добавление моего имени пользователя/пароля в 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()

Ответ 6

Ни один из ответов до этого не помог с моей ситуацией. Веб-сайт, на котором я аутентифицируюсь, использует единый вход, из-за которого возникали проблемы при использовании имени пользователя: [email protected]

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

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

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()