Python 在与Scrapy进行身份验证登录会话后使用Selenium
环顾四周后,如果您通过Scrapy登录到网站,那么如果您尝试在spider中使用Selenium,则经过身份验证的登录会话不会转移。是否有办法将该会话转移到Selenium?或者我必须用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 然后
谢谢 会话很可能只是您的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手动重新登录并导航回我所在的位置。