以知乎为例试探讨一种万能模拟登陆方式

以我们的日常上网的经验,有时我们好像不必登陆也能进入个人页面,原因大家都知道–cookies,根据这个思路,我们只要获取登陆之后的cookies我们就可以随意访问网站,但是要获取登陆后的cookies必须要先登陆,而现在的网站登陆时都有各种各样的验证码,一个网站一个验证原理(比如知乎的点击倒立文字就很特别),这就给我们登陆时带来了不少麻烦,解决了这个还有那个,遇到一个新的验证方式还需要重新研究,我今天要分享的就是一个笨拙但是却像“万金油 式的方法”–手工+selenium+requests。

1.总体思路

大家都知道selenium非常容易模拟登陆,但是却不擅长爬取信息,太慢了,所以我们就发挥它的长处,只用在登陆上,然后把登陆后的cookies传递给requests,然后利用requests去进行下面的爬取工作,各施所长。

2 .具体代码

python
#_*_coding:utf8_*_
from selenium import webdriver
import requests
import time


#利用selenium登录,获取cookies
br=webdriver.Chrome()
br.get("https://www.zhihu.com/#signin")
br.find_element_by_xpath("//span[contains(text(),'使用密码登录')]").click()
br.find_element_by_xpath("//input[@name='account']").send_keys("*********")
br.find_element_by_xpath("//input[@name='password']").send_keys("**********")
time.sleep(5)#手工点击验证码倒立文字预留时间
br.find_element_by_xpath("//button[contains(text(),'登录')]").click()
time.sleep(3)#网页加载时间
selenium_cookies=br.get_cookies()#把selenium获取的cookies保存到变量,备用。
# print(selenium_cookies)
br.quit()

#接下来由requests接收selenium的cookies,并访问网站
s=requests.Session()
for i in selenium_cookies:
    requests.utils.add_dict_to_cookiejar(s.cookies, {i['name']:i['value']})
headers={
    'Host':'www.zhihu.com',
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/55.0',
    'Accept':'text/html,application/xhtml+xm…plication/xml;q=0.9,*/*;q=0.8',
    'Accept-Language':'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
    'Accept-Encoding':'gzip, deflate, br',
    'Connection':'keep-alive',
    'Upgrade-Insecure-Requests':'1',
    'Pragma':'',
    'Cache-Control':'',
}
r=s.get("https://www.zhihu.com",headers=headers).content.decode('utf-8')
print(r)#访问个人中心验证

在此次试验中我遇到最大的坑就是selenium的cookies转换成requests的cookiejar对象了,查了好多资料,最终在官方文档里找到了答案,关于requests的cookie处理及cookiejar对象我会再总结一篇,以上。2017-10-2。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值