手把手带大家实现Bilibili模拟登陆(滑动验证码)项目,来肝!
1. 为什么要处理滑动验证码
在很多时候我们在做模拟登陆的时候会遇到滑动验证码,这个时候就必须要处理。
2. 目标网站
bilibili视频网站的滑动验证码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-84SzkWPr-1668861160014)(https://mmbiz.qpic.cn/mmbiz/A7icgZ2Ooga2ib08SFCUibOx0hn839LeoNLiadQcBliaibglLBCicMz6EYyvp7U6ErxXjicKpy0c5RKaPCDtSuBavX6zZA/640?wx_fmt=other&wxfrom=5&wx_lazy=1&wx_co=1)]
经过分析我们知道bilibili使用的是极验的拖动验证码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-69FJ8asb-1668861160015)(https://mmbiz.qpic.cn/mmbiz/A7icgZ2Ooga2ib08SFCUibOx0hn839LeoNLAFHC32pCKicn5c0bWPs8tJqIIev7c2wBYrJOGZf5NdobiaVSvs3QhL7A/640?wx_fmt=other&wxfrom=5&wx_lazy=1&wx_co=1)]
3.项目的开发环境
本项目需要用到 selenium,io,PIL,time,random,请提前安装
请安装对应版本的库如下,其他库均为标准库,无需安装 pip3 install Pillow4.2.1 pip3 install selenium3.12.0
4.项目流程介绍
- 初始化
- 请求bilibili的登录页面&模拟输入账号密码
- 获取验证码图片&有阴影拼图的验证码图片
- 比较两个验证码图片获取验证码滑块的偏移量
- 使用偏移值计算移动操作
- 操作滑块按钮,模拟拖动滑块做验证登录
5.bilibili模拟登陆-初始化
#coding:utf-8
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from io import BytesIO
from PIL import Image
import time
import random
class Bilibili(object):
def __init__(self):
# 设置登录页面url
self.url = 'https://passport.bilibili.com/login'
# 创建浏览器对象
self.driver = webdriver.Chrome()
# 设置页面的隐式等待
self.driver.implicitly_wait(3)
# 设置账号密码
self.user = '18668928175'
self.pwd = '461324morganna'
def login(self):
"""
实现主要的登录逻辑
"""
pass
def run(self):
self.login()
if __name__ == '__main__':
bili = Bilibili()
bili.run()