Обработка окна предупреждения "требуется аутентификация" с помощью 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 - ...
в окне аутентификации необходимо ввести два поля: Имя пользователя и пароль.
чтобы решить эту проблему, отправьте имя пользователя и пароль одновременно в поле предупреждения.
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()