B站登录需要用到图片点坐标点选类型的验证码验证,使用传统的OCR技术解决起来比较棘手,因此借助于第三方打码平台,可以快速实现这一功能。

  • 创建项目【使用打码平台登录B站】,新建python文件【bili.py】【img_api.py】【accounts.py】
  • 进入【accounts.py】,定义你的打码平台和B站账号以及密码
"""快识别账号密码"""
KUAI_USER = '你的账号'
KUAI_PASS = '你的密码'"""B站账号密码"""
BILI_USER = '你的账号'
BILI_PASS = '你的密码'
  • 进入【img_api.py】文件,进入打码平台开发文档的python接口(上面有提示,不打广告),把开发文档复制到【img_api.py】
import base64
import json
import requests
# 一、图片文字类型(默认 3 数英混合):
# 1 : 纯数字
# 1001:纯数字2
# 2 : 纯英文
# 1002:纯英文2
# 3 : 数英混合
# 1003:数英混合2
#  4 : 闪动GIF
# 7 : 无感学习(独家)
# 11 : 计算题
# 1005:  快速计算题
# 16 : 汉字
# 32 : 通用文字识别(证件、单据)
# 66:  问答题
# 49 :recaptcha图片识别
# 二、图片旋转角度类型:
# 29 :  旋转类型
#
# 三、图片坐标点选类型:
# 19 :  1个坐标
# 20 :  3个坐标
# 21 :  3 ~ 5个坐标
# 22 :  5 ~ 8个坐标
# 27 :  1 ~ 4个坐标
# 48 : 轨迹类型
#
# 四、缺口识别
# 18 : 缺口识别(需要2张图 一张目标图一张缺口图)
# 33 : 单缺口识别(返回X轴坐标 只需要1张图)
# 五、拼图识别
# 53:拼图识别
def base64_api(uname, pwd, img, typeid):with open(img, 'rb') as f:base64_data = base64.b64encode(f.read())b64 = base64_data.decode()data = {"username": uname, "password": pwd, "typeid": typeid, "image": b64}result = json.loads(requests.post("http://api.ttshitu.com/predict", json=data).text)if result['success']:return result["data"]["result"]else:return result["message"]return ""if __name__ == "__main__":img_path = "C:/Users/Administrator/Desktop/file.jpg"result = base64_api(uname='你的账号', pwd='你的密码', img=img_path, typeid=3)print(result)
  • 重写【img_api.py】文件
import base64
from accounts import KUAI_USER, KUAI_PASS           # accounts.py中导入你定义的打码平台账号和密码变量
import requestsdef base64_api(img):# 定义一个函数, 把用户名,密码 和图片路径传进去with open(img, 'rb') as f:            # 打开请求到的验证码图片base64_data = base64.b64encode(f.read()).decode()       # 读取验证码图片并且转换成字符串类型data = {"username": KUAI_USER , "password": KUAI_PASS, "typeid": 21, "image": base64_data}   # 用户名和密码导入,typeid是根据开发文档查到的对应接口数字(B站验证码为图片坐标点选类型), image是图片字符串数据result = requests.post("http://api.ttshitu.com/predict", data=data).json()   # 携带data参数,发送post请求,返回json数据if result['success']:return result["data"]["result"]else:return result["message"]if __name__ == "__main__":img_path = "yzm.png"    # 相对路径,由【bili.py】保存在项目文件下result = base64_api(img=img_path)   # 把img_path传递进去,调用base64_api函数print(result)
  • 进入谷歌浏览器,搜索栏输入:chrome://version 查看浏览器版本

  • 进入(https://registry.npmmirror.com/binary.html?path=chromedriver/)查找谷歌浏览器对应的版本号,下载下来并解压,放到项目路径下面

  • 进入【bili.py】,编写主程序
import time
from selenium.webdriver.common.by import By
from accounts import BILI_USER, BILI_PASS
from selenium import webdriver
from selenium.webdriver import ActionChains
from img_api import base64_apidriver = webdriver.Chrome()         # 实例化浏览器驱动
driver.get('https://passport.bilibili.com/login')  # 发送请求
driver.implicitly_wait(10) # 隐式等待10秒
driver.maximize_window() # 最大化浏览器窗口"""找用户名和密码框, 输入数据"""
username_input = driver.find_element(By.CSS_SELECTOR, '#login-username')   # 使用css语法定位用户名输入框
username_input.click()   # 点击账号输入框
time.sleep(0.5)    # 强制等待0.5秒
username_input.send_keys(BILI_USER) # 传入账号
time.sleep(0.5) # 强制等待0.5秒password_input = driver.find_element(By.CSS_SELECTOR, '#login-passwd')  # 使用css语法定位密码输入框
password_input.click() # 点击密码输入框
time.sleep(0.5)
password_input.send_keys(BILI_PASS)  # 传入密码
time.sleep(0.5)"""点击登录按钮"""
time.sleep(0.5)
driver.find_element(By.CSS_SELECTOR, '.btn.btn-login').click()  # 使用css语法定位登录按钮并点击
time.sleep(2)# 找验证码对应的标签
img_label = driver.find_element(By.CSS_SELECTOR, '.geetest_holder.geetest_silver') # 点击登录后跳转到验证码验证界面,使用css语法定位到验证码标签对象"""直接根据标签元素保存图片"""
time.sleep(4)  # 保存验证码前一定要加强制等待
img_label.screenshot('yzm.png') # 截取验证码图片
time.sleep(4)
print('正在保存验证码...')"""识别图验证码"""
code_result_list = base64_api('yzm.png')   # 调用【img_api.py】,返回的数据是X,Y 坐标值
print('验证码识别结果为:', code_result_list)  # 113,79|197,147result_list = code_result_list.split('|')  # ['113,79', '197,147'],转换成列表for result in result_list:x = result.split(',')[0]  # 根据列表索引取出 X 坐标值,是str类型y = result.split(',')[1]  # 根据列表索引取出 Y 坐标值,是str类型# ActionChains 鼠标动作链对象# move_to_element_with_offset  根据元素执行点击操作# perform()  执行动作链ActionChains(driver).move_to_element_with_offset(img_label, int(x), int(y)).click().perform()time.sleep(5)
"""点击确认"""
driver.find_element(By.CSS_SELECTOR, '.geetest_commit_tip').click()input()
driver.quit()
  • 运行【bili.py】
  • 跳转到短信验证码登录页面,证明打码成功

使用打码平台登录B站相关推荐

  1. Python——超级鹰打码平台实现selenium对b站的自动化登陆

    目录 一 .Chrome(谷歌)驱动器的下载 (一)驱动器版本选择 (二)下载Chrome驱动器 二.需要安装的库 (一)安装命令 (二)指定selenium版本原因 三.实现步骤 (一)导入相关库 ...

  2. 越过验证码 selenium模拟登录B站项目实战(附源码)

    实战:selenium模拟登录B站 登录验证码处理 selenium 中的难点验证码破解因为确实没有很好的方式,一般都需要通过第三方平台实现破解,本案例中使用的是超级鹰平台(收费,大概1元30次,测试 ...

  3. Scrapy搜狗微信:使用cookies登录并使用打码平台自动输入验证码

    Scrapy搜狗微信:使用cookies登录并使用打码平台自动输入验证码 爬虫思路 知识点 前期准备 正文 爬虫思路 通过搜狗微信的搜索功能实现输入关键字搜索并实现自动化翻页爬取100页搜索内容(搜狗 ...

  4. 计算机毕业设计JAVA钢材销售平台登录mybatis+源码+调试部署+系统+数据库+lw

    计算机毕业设计JAVA钢材销售平台登录mybatis+源码+调试部署+系统+数据库+lw 计算机毕业设计JAVA钢材销售平台登录mybatis+源码+调试部署+系统+数据库+lw 本源码技术栈: 项目 ...

  5. java毕业设计钢材销售平台登录mybatis+源码+调试部署+系统+数据库+lw

    java毕业设计钢材销售平台登录mybatis+源码+调试部署+系统+数据库+lw java毕业设计钢材销售平台登录mybatis+源码+调试部署+系统+数据库+lw 本源码技术栈: 项目架构:B/S ...

  6. 微信扫描二维码快速登录网站

    在近期的一个项目中用到了微信扫描注册.登录网站功能所以整理了下希望对读者有帮助. 首先,你需要有一个没有绑定微信.微信公众平台的邮箱注册成为微信开放平台开发者,在管理中心创建移动应用.或者网站应用获得 ...

  7. flask实战之问答平台(参考b站视频)

    准备 新建一个项目,在项目中添加一个config.py文件,用来进行邮箱验证码,cookie,和session和一些加密等的配置 这样看来config.py是项目的一部分了,但是还要在app.py中进 ...

  8. qq邮箱电脑版登录入口_青骄第二课堂学生平台登录入口,青骄第二课堂登录入口(官网手机版入口:https://m.2class.com/)...

    青骄第二课堂学生平台登录入口,青骄第二课堂登录入口(官网手机版入口:https://m.2-class.com/) ----------------------------------        ...

  9. 第23讲:利用资源,学会用打码平台处理验证码

    在前一课时我们介绍了多种多样的验证码,有图形文字的.有模拟点选的.有拖动滑动的,但其实归根结底都需要人来对某种情形做一些判断,然后把结果返回并提交.如果此时提交的验证码结果是正确的,并且通过了一些验证 ...

最新文章

  1. mysql压缩配置_MySQL压缩版安装配置
  2. Linux Kernel TCP/IP Stack — L7 Layer — Application Socket I/O 接口类型
  3. python实现表格合并_Python实现合并excel表格的方法分析
  4. Python中如何读取xml的数据
  5. 关于Django中的数据库操作API之distinct去重的一个误传
  6. [C++] - 创建对象时 () 和 {} 的区别
  7. java实验指导答案华软_Java核心编程技术实验指导教程
  8. Arcgis Javascript那些事儿(一)--Arcgis server发布feature access服务
  9. ethtool查看网卡以及修改网卡配置
  10. 常用的英文文献引用格式
  11. 屏幕录像专家V2014(附注册码)
  12. win7系统删除多余的系统服务操作
  13. 使用html语言制作表格步骤,HTML表格标记教程(1):制作表格
  14. 用Python做的整蛊小程序——整点阴间的东西
  15. java创建动态二维数组
  16. IP-Guard安全U盘使用说明书
  17. 赛扬处理器_英特尔发布11代奔腾、赛扬处理器 均支持AVX指令集
  18. sql将数据按照年月日分组并统计数量
  19. Java JDK 1.8 新特性 Stream流
  20. 删除一个node或者属性

热门文章

  1. 前端----HTML/CSS 单边框
  2. 域名该怎样选_给项目选择域名时我们常犯的几个错误 我们应该如何正确选择域名...
  3. python技巧 黑魔法指南笔记
  4. Aeon项目今天正式启动
  5. OSPF 理论一(热爱自己 热爱生活)
  6. Python面向对象之:三大特性:继承,封装,多态以及类的约束
  7. 如何防止CDN防护被绕过
  8. 一个拖延者的自我救赎
  9. AES128加密-S盒和逆S盒构造推导及代码实现
  10. BZOJ[3620]似乎在梦中见过的样子 KMP