2012-06-26 96 views
7

我是scrapy的新手,并决定尝试一下,因为良好的在线评论。我正尝试使用scrapy登录到网站。我已经成功地使用硒和机械化的组合登录,通过收集硒所需的饼干并将其添加到机械化中。现在我正在尝试做类似于scrapy和selenium的东西,但似乎无法获得任何工作。我甚至不能确定是否有任何工作。谁能帮帮我吗。以下是我开始的。我甚至可能甚至不需要用scrapy转移cookie,但我不能告诉这个事情是否真的登录过。 感谢scrapy认证用cookies登录

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

回答

10

你的问题是更多的调试问题,所以我的答案刚才你的问题,没有确切答案的一些注意事项。

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 - 你在这里分配的功能,不是返回结果。我认为你不需要在这里传递任何函数作为参数。它应该是:

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

cookies论据Request应该是一个字典 - 请确认它的确是一个字典。

我真的甚至不知道是否有任何工作或不工作。

在回调中放置一些打印件以跟随执行。

+1

修复您记下的问题后,我能够成功登录!注意:硒返回的cookie是一个字典列表,必须将其更改为单个字典。非常感谢您的帮助。 – JonDog

+0

对不起,我新来stackoverflow。我厌倦了投票,但它说我需要15点声望才能投票。我没有看到任何其他方式来标记为回答。更新 - 好吧,我点击复选标记。我认为就是这样。 – JonDog

+0

@ JohnDog ..请问您如何处理从一种形式到另一种形式的cookie转换 – Amistad