环顾四周,似乎如果你通过Scrapy登录到一个网站,如果你试图在爬虫中使用Selenium,认证的登录会话不会转移。有没有办法把这个会话转移到Selenium上?或者我必须用Selenium重新登录网站吗?
谢谢!
发布于 2016-07-15 15:04:20
会话很可能只是您的cookie。因此,要将会话转换为selenium webdriver,您需要将scrapy请求的cookie设置为Selenium。
Scrapy足够聪明,可以自己跟踪cookies,您可以在response.headers
中找到当前请求的cookies。
然后,您可以为您的webdriver设置这些cookie:
driver.add_cookie({'name': 'foo', 'domain': 'bar'})
您可以使用字典理解将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)
注意:一些网站可以使用更复杂的会话,这些会话也需要其他标头来匹配,但您也可以通过将粗糙的响应头复制到selenium webdriver来复制这些会话。
发布于 2017-01-05 21:26:39
也可以在这里查看类似的问题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
)
将会话传递给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
https://stackoverflow.com/questions/38385832
复制相似问题