2011-10-21 16 views
10

私はSeleniumを使ってWebサイトにログインし、urllib2を使ってRESTyリクエストを作成しようとしています。それがうまくいくためには、同じセッションセレンを使用するためにurllib2が必要です。セレンとでurllib2のセレンからのセッションクッキーを使用

ロギングは素晴らしい仕事をし、私は

self.driver.get_cookies() 

を呼び出すことができますし、私はすべてのクッキーセレンのリストを持って知っている、そしてそれは、このような少し何かを探して終わる:

[{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の中にクッキーを使用するためにいくつかの異なる方法を試してみた

、私はこの1つは最高に見えると思う:

# 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()を呼び出すと、ログインページが返されます。

何か不足していますか?

問題を探すためにどのようにしたらよいでしょうか?

ありがとうございました。

答えて

13

代わりにrequestsライブラリを使用することで、この問題を解決できました。私はセレンからクッキーを繰り返し、そして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

次のように試してみてください。

+0

オープナー= urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))から "cj"とは何ですか? –

+0

'cj = cp.cookiejar'。元の質問のコードにあります。 – ronnefeldt

関連する問題