Уведомления

Группа в Telegram: @pythonsu

#1 Июль 28, 2019 15:57:08

ZiG
Зарегистрирован: 2018-12-16
Сообщения: 47
Репутация: +  0  -
Профиль   Отправить e-mail  

Selenium, куки и танцы с бубном

Вначале расскажу про танцы с бубном.
Продолжаю шаманить с Selenium и дошло дело до кук. И вот тут началось.
Задача, впихнуть куки не браузера на сайт, а свои… например на сайт yandex.ru/internet/ зайти под куками

 coockie = {'yandexuid': '5702666281564305746'}
Через requests Это довольно просто делается.
а вот в Selenium нужно написать
 browser.add_cookie(coockie)
И при этом переменная coockie должна быть не просто словарем, а определенного параметра
 coockie = {'domain': 'yandex.ru', 'expiry': 4534445654, 'httpOnly': False, 'name': 'yandexuid', 'path': '/', 'secure': False, 'value': '5702666281564305746'}

Но это понятно, первый вопрос:
в словаре “expiry” что это? Что самое интересное, если зайти на сайт и сохранить куки, expiry будет типа флоат. А если отправить куки, то флоат не катит, нужны именно целые числа. Почему так, ХЗ.

Второй вопрос то же довольно интересный, вот код:
 from selenium import webdriver
coockie = {'domain': 'yandex.ru', 'expiry': 4534445654, 'httpOnly': False, 'name': 'yandexuid', 'path': '/', 'secure': False, 'value': '5702666281564305746'}
browser = webdriver.Chrome()
browser.get('https://yandex.ru/internet/')
browser.add_cookie(i)
print(browser.get_cookies())

Так вот, при таком коде, browser.get_cookies() возращает то, что отправил.
Но при этом открывается окошко браузера, с инфой у куках, и что интересное, пишет что ‘yandexuid’: ‘рандомное число, совсем не то что отправлял’

Долго я думал, как так может, одновременно, два разных значения кук.
Думал, может сначала объекту browser добавить куки, а потом уж только отправлять get запрос.
Нет, ругается.
Как оказалось, при случайном обновлении браузера, все стало на место. то есть сначало показывает рандомное число, обнавляешь в ручную, и начинает показывать сайт yandex.ru/internet/ то что нужно.
Странная штука.

Решил это так:
 from selenium import webdriver
coockie = [{'domain': 'yandex.ru', 'expiry': 4534445654, 'httpOnly': False, 'name': 'yandexuid', 'path': '/', 'secure': False, 'value': '5702666281564305746'}]
browser = webdriver.Chrome()
browser.get('https://mail.ru')
browser.add_cookie(i)
browser.get('https://yandex.ru/internet/')
print(browser.get_cookies())

Но решение это не идеально. В определенных ситуациях не подойдет. Мож кто подскажет, другой вариант, и все таки что такое expiry, почему присылает флоат, а отправить можно только цельное число? Спасибо за внимание.

Отредактировано ZiG (Июль 28, 2019 15:57:56)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version