首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在使用Scrapy进行身份验证登录会话后使用Selenium

在使用Scrapy进行身份验证登录会话后使用Selenium
EN

Stack Overflow用户
提问于 2016-07-15 07:37:51
回答 2查看 1.3K关注 0票数 3

环顾四周,似乎如果你通过Scrapy登录到一个网站,如果你试图在爬虫中使用Selenium,认证的登录会话不会转移。有没有办法把这个会话转移到Selenium上?或者我必须用Selenium重新登录网站吗?

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2016-07-15 15:04:20

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

Scrapy足够聪明,可以自己跟踪cookies,您可以在response.headers中找到当前请求的cookies。

然后,您可以为您的webdriver设置这些cookie:

代码语言:javascript
运行
复制
driver.add_cookie({'name': 'foo', 'domain': 'bar'})

您可以使用字典理解将response.headers['Set-Cookie']转换为字典,如下所示:

代码语言:javascript
运行
复制
import re
foo = response.headers['Set-Cookie']
values = {k.strip():v for k,v in re.findall(r'(.*?)=(.*?);', foo)}
driver.add_cookie(values)

注意:一些网站可以使用更复杂的会话,这些会话也需要其他标头来匹配,但您也可以通过将粗糙的响应头复制到selenium webdriver来复制这些会话。

票数 0
EN

Stack Overflow用户

发布于 2017-01-05 21:26:39

也可以在这里查看类似的问题scrapy selenium authentication

使用scrapy api登录

代码语言:javascript
运行
复制
# call scrapy post request with after_login as callback
    return FormRequest.from_response(
        response,
        # formxpath=formxpath,
        formdata=formdata,
        callback=self.browse_files
    )

将会话传递给selenium驱动程序

代码语言:javascript
运行
复制
# 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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38385832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档