描述:登录界面存在验证码,需要通过验证码的输入来实现登录。对于验证码的处理,我们可以通过session的方式,来保证访问的多个请求,在一个事务里面,
1、先创建一个session
req = requests.session()
2、通过session来把验证码下载到本地,
code = req.get("https://passport.company-pvt.tongtool.com/captcha.jpg", headers=headers)
with open('code.jpg', 'wb') as file:
file.write(code.content)
file.close
3、使用fiddle对登录请求分析,传入的参数如下,其中cap为手工输入的验证码
data = {"u": "",
"haveRisk": "https://twerp-staging.tongtool.com/#/goods/mygoods",
"username": "******",
"password": "****",
"captcha": cap}
4、执行登录
login = req.post(url, headers=headers, params=data)
通过打印返回的信息,可以验证是否登录成功。注意要看post的时候,参数是以什么格式传递的,这里通过header和请求分析,参数是form-data格式,所以post请求的时候要以params形式,让参数和值以key=value的形式,拼接在url后面。
如果参数是以dict的形式传递时候,就要用data=data来传递,如果是以json的格式时候,需要把dict转化为json格式json.dumps(data)来传递
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"Accept-Encoding": "gzip,deflate,br",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
"Content-Type": 'application/x-www-form-urlencoded',
"Cookie": "_ati=8090510126603; pgv_pvi=1774199808; _qddaz=QD.cslqzu.3wyu7t.jzv4d679; 201606160000017569__deviceUUID=7cb9aaf8-2ead-4ec3-b193-54bb028643f6; 201112010000000193__deviceUUID=5dfeabf2-a3ef-4f26-bd99-eaf2b0548717; 201909050000021055__deviceUUID=818979d9-6593-49db-86d0-a20f09f4acee; 201902170000020467__deviceUUID=ec038120-6ddc-4f1f-bea9-81d804cf1a34; 201408150000009261__deviceUUID=ffe82ba7-cbb7-4197-ba87-e8ab24214578; OA202005060000003__deviceUUID=29122229-3e1a-4333-b183-6fc6c0d61be3; pgv_si=s5685989376; 4124bc0a9335c27f086f24ba207a4912ttcuid=bdc0cb7d-9bd8-40c3-bb4f-c3ee3ee5d8e7; JSESSIONID=DFC98EE0906DC261368B177A8F2AB083.passport1; ttcuid=9a702b92-d622-41cf-8eb7-488b01552954",
}
完整的代码如下:
import requests
import json
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
req = requests.session()
url = "https://passport.company-pvt.tongtool.com/check"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"Accept-Encoding": "gzip,deflate,br",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
"Content-Type": 'application/x-www-form-urlencoded',
"Cookie": "_ati=8090510126603; pgv_pvi=1774199808; _qddaz=QD.cslqzu.3wyu7t.jzv4d679; 201606160000017569__deviceUUID=7cb9aaf8-2ead-4ec3-b193-54bb028643f6; 201112010000000193__deviceUUID=5dfeabf2-a3ef-4f26-bd99-eaf2b0548717; 201909050000021055__deviceUUID=818979d9-6593-49db-86d0-a20f09f4acee; 201902170000020467__deviceUUID=ec038120-6ddc-4f1f-bea9-81d804cf1a34; 201408150000009261__deviceUUID=ffe82ba7-cbb7-4197-ba87-e8ab24214578; OA202005060000003__deviceUUID=29122229-3e1a-4333-b183-6fc6c0d61be3; pgv_si=s5685989376; 4124bc0a9335c27f086f24ba207a4912ttcuid=bdc0cb7d-9bd8-40c3-bb4f-c3ee3ee5d8e7; JSESSIONID=DFC98EE0906DC261368B177A8F2AB083.passport1; ttcuid=9a702b92-d622-41cf-8eb7-488b01552954",
}
code = req.get("https://passport.company-pvt.tongtool.com/captcha.jpg", headers=headers)
with open('code.jpg', 'wb') as file:
file.write(code.content)
file.close
cap = input("验证码:")
data = {"u": "",
"haveRisk": "https://twerp-staging.tongtool.com/#/goods/mygoods",
"username": "*****",
"password": "*****",
"captcha": cap}
requests.packages.urllib3.disable_warnings()
login = req.post(url, headers=headers, params=data)
print(login.status_code)
print(login.text)
print (req.headers)
print (req.auth)