python+requests 验证码登录

描述:登录界面存在验证码,需要通过验证码的输入来实现登录。对于验证码的处理,我们可以通过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)

 

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
爬虫验证码登录是一种常见的反爬虫机制,主要是为了防止机器人恶意登录或者注册。这种机制会在登录页面中添加一个验证码,需要用户输入正确的验证码才能登录。下面是一个简单的Python爬虫验证码登录的例子: ```python import requests from bs4 import BeautifulSoup session = requests.session() # 首先访问登录页面,获取验证码图片 login_url = 'https://example.com/login' response = session.get(login_url) soup = BeautifulSoup(response.text, 'html.parser') captcha_img_url = soup.find('img', attrs={'class': 'captcha-img'})['src'] # 下载验证码图片 captcha_response = session.get(captcha_img_url, stream=True) with open('captcha.jpg', 'wb') as f: for chunk in captcha_response.iter_content(chunk_size=128): f.write(chunk) # 手动输入验证码 captcha = input('请输入验证码:') # 构造登录请求 username = 'your_username' password = 'your_password' data = { 'username': username, 'password': password, 'captcha': captcha } response = session.post(login_url, data=data) # 判断登录是否成功 if '登录成功' in response.text: print('登录成功') else: print('登录失败') ``` 在这个例子中,我们首先访问登录页面,获取验证码图片的URL。然后下载验证码图片,并手动输入验证码。最后构造登录请求,发送POST请求进行登录,并判断登录是否成功。 需要注意的是,每个网站的验证码登录机制都可能不同,需要根据具体情况进行调整。同时,爬虫验证码登录也可能违反网站的服务条款,需要谨慎使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值