Вначале расскажу про танцы с бубном.
Продолжаю шаманить с 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)