#python #cookies #selenium #urllib2 #session-cookies
#python #файлы cookie #selenium #urllib2 #сеансовые файлы cookie
Вопрос:
Я пытаюсь использовать Selenium для входа на веб-сайт, а затем использовать urllib2 для выполнения запросов на восстановление. Однако для того, чтобы он работал, мне нужно, чтобы urllib2 мог использовать тот же сеансовый Selenium, который используется.
Вход в систему с помощью selenium отлично сработал, и я могу позвонить
self.driver.get_cookies()
и у меня есть список всех файлов cookie, о которых знает selenium, и в итоге он выглядит примерно так:
[{u'domain': u'my.awesome.web.app.local',
u'expiry': 1319230106,
u'name': u'ci_session',
u'path': u'/',
u'secure': False,
u'value': u'9YEz6Qs9rNlONzXbZPZ5i9jm2Nn4HNrbaCJj2c+...'
}]
Я пробовал несколько разных способов использования cooky в urllib2, я думаю, что этот выглядит лучше всего:
# self.driver is my selenium driver
all_cookies = self.driver.get_cookies()
cp = urllib2.HTTPCookieProcessor()
cj = cp.cookiejar
for s_cookie in all_cookies:
cj.set_cookie(
cookielib.Cookie(
version=0
, name=s_cookie['name']
, value=s_cookie['value']
, port='80'
, port_specified=False
, domain=s_cookie['domain']
, domain_specified=True
, domain_initial_dot=False
, path=s_cookie['path']
, path_specified=True
, secure=s_cookie['secure']
, expires=None
, discard=False
, comment=None
, comment_url=None
, rest=None
, rfc2109=False
)
)
opener = urllib2.build_opener(cp)
response = opener.open(url_that_requires_a_logged_in_user)
response.geturl()
Однако это не работает.
Этот последний вызов response.geturl() возвращает страницу входа в систему.
Я что-то упустил?
Есть идеи о том, как следует искать проблему?
Спасибо.
Ответ №1:
Я смог преодолеть эту проблему, используя requests
вместо этого библиотеку. Я перебрал файлы cookie из selenium, а затем передал их в простой словарь с name:value
парами.
all_cookies = self.driver.get_cookies()
cookies = {}
for s_cookie in all_cookies:
cookies[s_cookie["name"]]=s_cookie["value"]
r = requests.get(my_url,cookies=cookies)
Ответ №2:
Вы можете попробовать, как показано ниже.
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
urllib2.install_opener(opener)
f_opener = opener.open(url_that_requires_a_logged_in_user)
content = f_opener.read()
Комментарии:
1. что такое «cj» из opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))?
2.
cj = cp.cookiejar
. Это в коде исходного вопроса.