Обращение с полем "Требуется проверка подлинности" с помощью 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()