前言html
有些登陆的接口会有验证码:短信验证码,图形验证码等,这种登陆的话验证码参数能够从后台获取的(或者查数据库最直接)。数据库
获取不到也不要紧,能够经过添加cookie的方式绕过验证码。json
另外一篇博文 Python Selenium Cookie 绕过验证码实现登陆 介绍了另一种处理方式,及实际项目应用实战,有兴趣的同窗能够点击查看。服务器
1、抓登陆cookiecookie
1.登陆后会生成一个已登陆状态的cookie,那么只须要直接把这个值添加到cookies里面就能够了。session
2.能够先手动登陆一次,而后抓取这个cookie,这里就须要用抓包工具fiddler了工具
3.先打开博客园登陆界面,手动输入帐号和密码(勾选下次自动登陆)post
4.打开fiddler抓包工具,刷新下登陆首页,就是登陆前的cookie了编码
5.登陆成功后,再查看cookie变化,发现多了两组参数,多的这两组参数就是咱们想要的,copy出来,一会有用url
# baseinfo -> __init__ #-*-coding:utf-8-*- # Time:2017/9/23 17:44 # Author:YangYangJun loginUrl = "https://passport.cnblogs.com/user/signin" loginHeaders = { "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36" } CNBlogsCookie = '经过抓包工具获取该Cookie' CnblogsAspNetCoreCookies = '经过抓包工具获取该Cookie' editUrl = 'https://i.cnblogs.com/EditPosts.aspx?opt=1'
#-*-coding:utf-8-*- # Time:2017/9/23 10:15 # Author:YangYangJun import requests #导入配置文件 import baseinfo #登陆访问地址 loginUrl = baseinfo.loginUrl #请求头 loginHeaders = baseinfo.loginHeaders #登陆后Cookie1 CNBlogsCookie = baseinfo.CNBlogsCookie #登陆后Cookie2 CnblogsAspNetCoreCookies = baseinfo.CnblogsAspNetCoreCookies #新建随笔方位地址 editUrl = baseinfo.editUrl #获取session s = requests.session() # #r = s.get(loginUrl,headers = loginHeaders,verify = False ) #获取cookie c = requests.cookies.RequestsCookieJar() # 添加登陆须要的两个cookie c.set(".CNBlogsCookie",CNBlogsCookie) c.set('.Cnblogs.AspNetCore.Cookies',CnblogsAspNetCoreCookies) #更新cookie s.cookies.update(c) body = {"__VIEWSTATE": "", "__VIEWSTATEGENERATOR":"FE27D343", "Editor$Edit$txbTitle":"这是绕过登陆的标题: -*- Bluesky -*-", "Editor$Edit$EditorBody":"<p>这里是中文内容:http://www.cnblogs.com/Skyyj/</p>", "Editor$Edit$Advanced$ckbPublished":"on", "Editor$Edit$Advanced$chkDisplayHomePage":"on", "Editor$Edit$Advanced$chkComments":"on", "Editor$Edit$Advanced$chkMainSyndication":"on", "Editor$Edit$lkbDraft":"存为草稿", } r2 = s.post(editUrl, data=body, verify=False) #获取请求返回的响应信息 print r2.content
body中的值是能够经过开发者模式查看,以下图:
填写标题
response的返回内容还有其它更多信息
-- r.status_code #响应状态码-- r.content #字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩-- r.headers #以字典对象存储服务器响应头,可是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None-- r.json() #Requests中内置的JSON解码器-- r.url # 获取url-- r.encoding # 编码格式-- r.cookies # 获取cookie-- r.raw #返回原始响应体-- r.text #字符串方式的响应体,会自动根据响应头部的字符编码进行解码-- r.raise_for_status() #失败请求(非200响应)抛出异常