python技术|python模拟登录网站(带图形验证码)

往期回顾:上一次说了 python模拟登录不带验证码的网站,现在来说说如果带验证码的网站怎么办
验证码也是一种反爬机制,如果登陆地方存在验证码我们有两种思路对验证码进行识别

  • 肉眼识别,即我们将验证码下载下来自己进行识别然后手动输入,这个适合咱们网络安全的人
  • 第三方识别平台——如云打码,斐斐打码等,适合专业python人员
因为本人从事的是渗透测试,爬虫只是用来简单的爬取一些漏洞数据,所以这里我就只演示利用肉眼识别验证码的方式。每次请求登录页面验证码都会刷新,所以还是需要用到session对象。
代码编写 如下这个小说网,登录需要验证码
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模拟登录网站(带图形验证码)】

    推荐阅读