python技术|python模拟登录网站(带图形验证码)
往期回顾:上一次说了 python模拟登录不带验证码的网站,现在来说说如果带验证码的网站怎么办
验证码也是一种反爬机制,如果登陆地方存在验证码我们有两种思路对验证码进行识别
- 肉眼识别,即我们将验证码下载下来自己进行识别然后手动输入,这个适合咱们网络安全的人
- 第三方识别平台——如云打码,斐斐打码等,适合专业python人员
代码编写 如下这个小说网,登录需要验证码
文章图片
模拟流程大致如下:
- 利用session发起请求然后xpath获取验证码图的下载地址,将验证码保存
- 封装post数据包,将识别的验证码手动输入
- session发起post登陆请求
- 请求个人信息,验证是否登陆成功
import requests
from lxml import etree
from requests.packages import urllib3
urllib3.disable_warnings()url = "https://www.qb5.tw/login.php"
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0;
WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
}# 1.创建session对象
session = requests.session()
pag_text = session.get(url=url,headers=headers).text# 2.实例化一个etree对象,方便后面对页面进行数据解析
tree = etree.HTML(pag_text)# 3.提取验证码下载地址
img_path = "https://www.qb5.tw" + tree.xpath('//*[@id="main"]/div[1]/form/fieldset/p[3]/img/@src')[0]
print(img_path)# 4.下载验证码,以二进制的方式进行保存
img_content = session.get(img_path,headers=headers,verify=False).content
with open('./img.png','wb') as f:
f.write(img_content)
print('验证码图片下载成功')img_code= input('请输入验证码:')# 5.进行登录,定义post的参数
data = https://www.it610.com/article/{'username': 'test123',
'password': 'admin@123',
'checkcode': img_code,
'usecookie': '315360000',
'action': 'login',
'submit': '立即登陆'
}
# 判断是否登录成功
response = session.post(url=url,data=https://www.it610.com/article/data,headers=headers,verify=False)
response.encoding ='gbk'#编码防止乱码
response_text = response.text
if "登录成功"in response_text:
print("登陆成功")
# 请求个人信息页
ge = session.get(url='https://www.qb5.tw/userdetail.php',headers=headers,verify=False)
with open('xs.html','w',encoding='gbk') as f:
f.write(ge.text)
成功登录,并获取到登录后的个人信息页
文章图片
【python技术|python模拟登录网站(带图形验证码)】
推荐阅读
- python学习之|python学习之 实现QQ自动发送消息
- 逻辑回归的理解与python示例
- python自定义封装带颜色的logging模块
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- Python基础|Python基础 - 练习1
- Python爬虫|Python爬虫 --- 1.4 正则表达式(re库)
- Python(pathlib模块)
- python青少年编程比赛_第十一届蓝桥杯大赛青少年创意编程组比赛细则
- Python数据分析(一)(Matplotlib使用)
- GIS跨界融合赋能多领域技术升级,江淮大地新应用成果喜人