2011-10-21 7 views
10

Tôi đang cố gắng sử dụng Selenium để đăng nhập vào một trang web và sau đó sử dụng urllib2 để tạo yêu cầu RESTy. Để nó hoạt động, tôi cần urllib2 để có thể sử dụng cùng một phiên mà Selenium đã sử dụng.Sử dụng cookie phiên từ selen trong urllib2

Việc khai thác gỗ với selen làm việc tuyệt vời và tôi có thể gọi

self.driver.get_cookies() 

và tôi có một danh sách của tất cả các tập tin cookie selen biết về, và nó kết thúc lên tìm kiếm một chút gì đó như thế này:

[{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...' 
}] 

tôi đã thử một vài cách khác nhau để sử dụng trong cooky urllib2, tôi nghĩ rằng một điều này có vẻ là tốt nhất:

# 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() 

Nó không hoạt động mặc dù.

Cuộc gọi cuối cùng để response.geturl() trả về trang đăng nhập.

Tôi có thiếu gì đó không?

Bất kỳ ý tưởng nào về cách tìm hiểu vấn đề?

Cảm ơn.

Trả lời

13

Tôi đã có thể khắc phục sự cố này bằng cách sử dụng thư viện requests thay thế. Tôi đã lặp lại các cookie từ selen và sau đó chuyển chúng vào một từ điển đơn giản với các cặp 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) 
0

Bạn có thể thử như sau.

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() 
+0

"cj" từ opener = urllib2.build_opener (urllib2.HTTPCookieProcessor (cj)) là gì? –

+0

'cj = cp.cookiejar'. Đó là mã của câu hỏi gốc. – ronnefeldt