Не проходит базовая авторизация. Selenium + WD

Всем привет! В данный момент столкнулся с такой проблемой: есть сайт при переходе на который всплывает окно запрашивающее логин и пароль пользователя. Пробовал решить этот вопрос путем внедрения в код (пишу на python) части кода на AutoIt, не помогло, т.к. не видит окно ввода пароля/логина. GitHub - AhonVashibaka/PyAutoItPy: Обертка функций AutoIt для работы с окнами и контролам под Python 3.3 || AutoIt Windows and Controls functions wrapper for Python 3.3
Так же видел реализации на browsermobproxy, но с ним тоже не получилось. Есть у кого-то хотя бы приблизительный пример реализации?
p.s. Вариант с http://login:password@site.com тоже не прокатил.
p.p.s. Вариант:


    def setUp(self):
        self.base_url = "http://login:password@site.com"

не прошел.

1 лайк

ТЫ моешь или куки особые подложить с авторизацией при открытии страницы или же switchTo().alert()…(не знаю как на пайтон) - И ввести данные авторизации

Не помогло, или я просто не понял, как использовать.
если взять, например, куки, то такая конструкция не работает:

import unittest
import pickle

from selenium import webdriver

driver = webdriver.Firefox()
driver.get("https://site.com")
cookies = pickle.load(open("cookies.sqlite", "rb"))

по идее - в строке cookies = pickle.load(open("cookies.sqlite", "rb")) должно происходить чтение куки из файла.

driver.manage().addCookie - как-то так

Попробовал разобраться по шагам.

driver = webdriver.Firefox()
print('1')
driver.get('https://site.com')
print('2')
chek = driver.switch_to.alert
print('3')
chek.authenticate('name', 'pass')
print('4')

После запуска видим:
1

Следовательно, тест лишь открывает браузер. переход на сайт не происходит, т.к. этому мешает окно базовой авторизации. Может “мешает” HTTPS?

И никаких ошибок? Получается зависает скрипт ?

Именно. Ведь пока окно ввода логина/пароля не будет корректно заполнено значениями, даже в адресной строке не появятся адрес сайте.
Сейчас, кстати, решил по другому подойти к ситуации: создал другой профиль, прошел авторизацию (куки соответственно сохранились) и запустить тест по другим профилем.

Прошу ещё раз помочь.

driver = webdriver.Firefox(firefox_profile='Selenium')
driver.get('https://site.com')

Профиль Selenium был создан. Первый заход под ним осуществлен, в списке виден, но тест при запуске выдаёт ошибку:

No tests found

=================================== ERRORS ====================================
_______________________ ERROR collecting test002_OWA.py _______________________
test002_OWA.py:6: in <module>
    driver = webdriver.Firefox(firefox_profile='Selenium')
..\..\AppData\Local\Programs\Python\Python35\lib\site-packages\selenium\webdriver\firefox\webdriver.py:58: in __init__
    self.NATIVE_EVENTS_ALLOWED and self.profile.native_events_enabled)
E   AttributeError: 'str' object has no attribute 'native_events_enabled'

=========================== 1 error in 0.11 seconds ===========================

Последний вопрос снимается, т.к. даже под новым профилем выскакивает окно авторизации, надо думать в сторону browsermobproxy.

А есть ли возможность посмотреть на этот сервис в живую? (адрес в личку). Логин и пароль не нужны.

Обход базовой аутентификации зависит от браузера.
Насколько помню, только в хроме по дефолту можно через адресную строку передать лог/пас.
В ФФ нужно запускать браузер с спец флагом для активации автоматического логина.
В ИЕ нужно править реестр…

Если у кого-то возникнет еще желание разобраться с этим вопросом (@MaximZaitsev ), то можно экпериментировать на https://foo:bar@httpbin.org/basic-auth/foo/bar

Есть библиотека Requests Requests: HTTP for Humans™ — Requests 2.30.0 documentation . Она помогла не много вникнуть в суть проблемы, но не решить её. Так предположительно такой код должен проходить базовую авторизацию:

response = requests.get(url, verify=False, auth=HTTPBasicAuth(login, password))

Но не тут то было. Всё равно выдаёт 401 статус.

А какая вообще система аутентификации на сайте? Вы ее тестируете?

можете на сайт ссылку кинуть
попробуем самими написать

Вот ссылка (с другого сайт) https://httpbin.org/basic-auth/user/passwd
Логин: user
Пароль: passwd

Это вариант проходит.[quote=“AnthraxMind, post:6, topic:12173”]
driver = webdriver.Firefox()
print(‘1’)
driver.get(‘https://site.com’)
print(‘2’)
chek = driver.switch_to.alert
print(‘3’)
chek.authenticate(‘name’, ‘pass’)
print(‘4’)
[/quote]

Такой тоже глухо виснет.

Остальные пока не пробывал.

Дело в том, что с этим сайтом вышеупомянутый мной код хорошо работает: [quote=“AnthraxMind, post:14, topic:12173”]
response = requests.get(url, verify=False, auth=HTTPBasicAuth(login, password))
[/quote]

При верных реквизитах ответ 200, при не верных 401 .
Ещё вопрос, если сертификат сайта просрочен, то с этим уже нет возможности что-то сделать, в плане пройти базовую авторизацию?

http://login:password@site.com
Так уже запрещено браузером:

We should block requests for subresources that contain embedded credentials (e.g. “http://ima_user:hunter2@example.com/yay.tiff”). Such resources would be handled as network errors.
Specification

No public standards discussion

Причем тут селениум? Это окно проще проехать с помощью xdotool под любой Linux дистр, а лучше найди либу для управления клавой. У тебя по факту надо ввести логин, табнуть, пароль, табнуть дважды и нажать Enter.

Дабы не плодить темы, спрошу тут,
Использую Selenium 4, Python3, Chrome
Мне средствами тестов необходимо авторизоваться при помощи Basic Auth на внутреннем ресурсе. После авторизации, которого появляется кука с токеном и этот токен добавляется в заголовки части запросов
Я пробовал авторизоваться следующим способом:

driver.get('https://log:paws@new.dev.tech')

Но, увы, фронт частично загружается, и многие запросы имеют статус 401 (Unauthorized). В общем сайт не загружается нормально.

Одной из попыток было использование CDP

authorization = base64.b64encode("log:paws".encode("ascii")).decode("ascii")
                auth_dict = {'Authorization': f"Basic {authorization}"}
                params = ({"headers": network.Headers(auth_dict)})

                driver.execute_cdp_cmd('Network.enable', {})
                driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', params)
                driver.get(https://new.dev.tech)

Ситуация поменялась, фронт стал загружаться, и я получаю cookie с токеном. Но ссылки, такие как:
https://api.dev.tech/...., не загружаются и имеют статус: 401 Unauthorized. Соответственно, с бека мне ничего не приходит
При этом, все ссылки типа
https://new.dev.tech...
нормально загружаются и имеют необходимый токен в заголовках - это правильно, но ссылки типа https://api.dev.tech имеет пустой заголовок без Authorization Bearer токен.

Подскажите, пожалуйста, как можно авторизоваться