2011-10-21 9 views
10

Estoy tratando de usar Selenium para iniciar sesión en un sitio web y luego usar urllib2 para realizar solicitudes de RESTy. Sin embargo, para que funcione, necesito que urllib2 pueda usar la misma sesión que usó Selenium.Uso de una cookie de sesión de selenio en urllib2

El registro con selenio funcionaba muy bien y que pueda llamar

self.driver.get_cookies() 

y tengo una lista de todas las galletas de selenio conoce, y que termina buscando un poco de algo como esto:

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

he intentado un par de maneras diferentes de para utilizar el chiflado en urllib2, creo que éste parece el mejor:

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

Aunque no funciona.

Esa última llamada a response.geturl() devuelve la página de inicio de sesión.

¿Echo de menos algo?

¿Alguna idea de cómo hacerlo para buscar el problema?

Gracias.

Respuesta

13

Pude solucionar este problema utilizando la biblioteca requests en su lugar. Repetí las cookies del selenio y luego las pasé en un diccionario simple con name:value pares.

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

Usted puede tratar como a continuación.

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

¿Qué es "cj" desde opening = urllib2.build_opener (urllib2.HTTPCookieProcessor (cj))? –

+0

'cj = cp.cookiejar'. Está en el código de la pregunta original. – ronnefeldt

Cuestiones relacionadas