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

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

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

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

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

6 ответов


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

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

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

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

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


не могли бы вы попробовать использовать ключи вкладка в уведомления?

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

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

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


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

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

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

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

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

в окне аутентификации необходимо ввести два поля: Имя пользователя и пароль. 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()