在经过认证的登录会话后,通过Scrapy

在经过认证的登录会话后,通过Scrapy

问题描述:

在环顾四周后使用Selenium,似乎如果您通过Scrapy登录到网站,则如果尝试在蜘蛛内使用Selenium,则认证的登录会话不会转移。有没有办法将该会话转移到Selenium?或者我需要用Selenium重新登录网站吗?在经过认证的登录会话后,通过Scrapy

谢谢!

该会话很可能只是您的cookie。因此,要将会话转换为Selenium webdriver,您需要将scrapy请求的cookie设置为硒。

Scrapy足够聪明,可以自行追踪cookie,您可以在response.headers中找到当前请求的cookie。
然后你可以设置这些Cookie您的webdriver:

import re 
foo = response.headers['Set-Cookie'] 
values = {k.strip():v for k,v in re.findall(r'(.*?)=(.*?);', foo)} 
driver.add_cookie(values) 

注:一些网站可以使用也需要更复杂的会话

driver.add_cookie({'name': 'foo', 'domain': 'bar'}) 

可以使用字典理解像变换response.headers['Set-Cookie']到词典其他标题匹配,但您也可以通过将您的scrapy响应标题复制到您的selenium webdriver来复制该标题。

+0

嗨感谢这么多,我来试试出。但是我对python和我很陌生; ma对于在re.findall(r'(。*?)=(。*?);''中为k,v的'values = {k.strip():v' ,foo)}'line。你是否在行内定义了一个函数?我只想知道,所以我可以查找任何需要了解该行的相关教程。 –

+0

这被称为[词典理解](http://*.com/questions/1747817/create-a-dictionary-with-list-comprehension-in-python)它有点更先进的技术,但基本上它转换字符串标题''“cookie1 = value1; cookie2 = value”'进入字典'{“cookie1”:“value1”,“cookie2”:“value2”}' – Granitosaurus

+0

非常感谢。它并没有结束工作,但无论如何感谢!我采取了用硒手动重新登录并导航回到我所在的位置。 –

检查也有类似的问题在这里scrapy selenium authentication

日志与scrapy API

# call scrapy post request with after_login as callback 
    return FormRequest.from_response(
     response, 
     # formxpath=formxpath, 
     formdata=formdata, 
     callback=self.browse_files 
    ) 

通会话硒司机

# logged in previously with scrapy api 
# partial solution 
    cookies = map(lambda e: e.strip(), cookie2.split(";")) 

    for cookie in cookies:     
      cookie_map = {"name": name, "value": value}     
      print "adding cookie" 
      print cookie_map 
      self.driver.add_cookie(cookie_map) 

    self.driver.get(response.url) 

    files = self.wait_for_elements_to_be_present(By.XPATH, "//*[@id='files']", response) 
    print files