Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在与Scrapy进行身份验证登录会话后使用Selenium_Python_Python 2.7_Selenium_Scrapy - Fatal编程技术网

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

Python 在与Scrapy进行身份验证登录会话后使用Selenium,python,python-2.7,selenium,scrapy,Python,Python 2.7,Selenium,Scrapy,环顾四周后,如果您通过Scrapy登录到网站,那么如果您尝试在spider中使用Selenium,则经过身份验证的登录会话不会转移。是否有办法将该会话转移到Selenium?或者我必须用Selenium重新登录网站吗 谢谢 会话很可能只是您的cookie。因此,要将会话转换为SeleniumWebDriver,您需要将scrapy请求的cookie设置为Selenium Scrapy非常聪明,可以自己跟踪cookies。您可以在response.headers中找到当前请求的cookies 然后

环顾四周后,如果您通过Scrapy登录到网站,那么如果您尝试在spider中使用Selenium,则经过身份验证的登录会话不会转移。是否有办法将该会话转移到Selenium?或者我必须用Selenium重新登录网站吗


谢谢

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

Scrapy非常聪明,可以自己跟踪cookies。您可以在
response.headers
中找到当前请求的cookies
然后,您可以为您的Web驱动程序设置这些cookie:

driver.add_cookie({'name': 'foo', 'domain': 'bar'})
您可以使用dict comprehension将
response.headers['Set-Cookie']
转换为字典,如:

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

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

请在此处检查类似问题

使用scrapy api登录

# call scrapy post request with after_login as callback
    return FormRequest.from_response(
        response,
        # formxpath=formxpath,
        formdata=formdata,
        callback=self.browse_files
    )
将会话传递给selenium驱动程序

# 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

嗨,非常感谢,我来试试。但我对python和我都是新手;我对
values={k.strip():v代表k,v在re.findall(r'(.*?=(.*?),,foo)}
行有点困惑。您是否在该行中定义函数?我只是想知道,这样我就可以查找任何我需要的相关教程来理解这一行。这叫做它是一种更先进的技术,但基本上它将字符串头
“cookie1=value1;cookie2=value”
转换成字典
{“cookie1”:“value1”,“cookie2”:“value2”}
非常感谢。它最终没有起作用,但还是谢谢你!我求助于使用selenium手动重新登录并导航回我所在的位置。