我試圖使用Selenium登錄網站,然後使用urllib2來發出RESTy請求。爲了使它工作,我需要urllib2能夠使用Selenium使用的同一個會話。在urllib2中使用selenium中的會話cookie
與硒的記錄偉大的工作,我可以叫
self.driver.get_cookies()
和我都硒知道的Cookie名單,並最終看起來有點像這樣:
[{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%2B...'
}]
我試圖用在對的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()返回登錄頁面。
我錯過了什麼嗎?
任何想法應該如何去尋找問題?
謝謝。
什麼是來自opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))的「cj」? –
'cj = cp.cookiejar'。它在原始問題的代碼中。 – ronnefeldt