autenticación de inicio de sesión con cookies

Soy nuevo en scrapy y decidí probarlo debido a las buenas críticas en línea. Estoy tratando de iniciar sesión en un sitio web con scrapy. Ingresé exitosamente con una combinación de selenium y mecanizado, recolectando las cookies necesarias con selenium y agregándolas a mecanizar. Ahora estoy tratando de hacer algo similar con scrapy y selenium, pero parece que no hay nada que funcione. Realmente no puedo decir si algo está funcionando o no. Alguien puede ayudarme por favor. A continuación es lo que he comenzado. Puede que ni siquiera tenga que transferir las cookies con scrapy, pero no puedo decir si la cosa alguna vez realmente se registra o no. Gracias

from scrapy.spider import BaseSpider from scrapy.http import Response,FormRequest,Request from scrapy.selector import HtmlXPathSelector from selenium import webdriver class MySpider(BaseSpider): name = 'MySpider' start_urls = ['http://my_domain.com/'] def get_cookies(self): driver = webdriver.Firefox() driver.implicitly_wait(30) base_url = "http://www.my_domain.com/" driver.get(base_url) driver.find_element_by_name("USER").clear() driver.find_element_by_name("USER").send_keys("my_username") driver.find_element_by_name("PASSWORD").clear() driver.find_element_by_name("PASSWORD").send_keys("my_password") driver.find_element_by_name("submit").click() cookies = driver.get_cookies() driver.close() return cookies def parse(self, response,my_cookies=get_cookies): return Request(url="http://my_domain.com/", cookies=my_cookies, callback=self.login) def login(self,response): return [FormRequest.from_response(response, formname='login_form', formdata={'USER': 'my_username', 'PASSWORD': 'my_password'}, callback=self.after_login)] def after_login(self, response): hxs = HtmlXPathSelector(response) print hxs.select('/html/head/title').extract() 

Su pregunta es más un problema de depuración, por lo que mi respuesta tendrá solo algunas notas sobre su pregunta, no la respuesta exacta.

 def parse(self, response,my_cookies=get_cookies): return Request(url="http://my_domain.com/", cookies=my_cookies, callback=self.login) 

my_cookies=get_cookies : está asignando una función aquí, no el resultado que devuelve. Creo que no necesitas pasar ninguna función aquí como parámetro en absoluto. Debería ser:

 def parse(self, response): return Request(url="http://my_domain.com/", cookies=self.get_cookies(), callback=self.login) 

cookies argumento de las cookies para la Request debe ser un dict. Por favor, verifique que sea un dict.

Realmente no puedo decir si algo está funcionando o no.

Ponga algunas impresiones en los callbacks para seguir la ejecución.