python点选破解登录bilibili

环境介绍

Python:3.7.7
PyCharm:2019.2.6
Chrome浏览器:89.0.4389.114

创建三个python项目文件,分别存放主代码、对接第三方代码和账号密码

在这里插入图片描述

注册第三方平台账号

这里我用的是快识别:http://www.kuaishibie.cn/,注册后充值一元即可

填写账号与密码

userandpasswd.py
---
USER_NAME = ****    #bilibili平台账号
USER_PASSWD = '****' #bilibili平台账号密码
KSB_NAME = '******' #快识别注册的账号
KSB_PASSWD = '******' #快识别的密码

对接第三方平台

kuaishibie.py
---
import base64
import json
import requests
def base64_api(uname, pwd,  img):
    with open(img, 'rb') as f:
        base64_data = base64.b64encode(f.read())
        b64 = base64_data.decode()
    data = {"username": uname, "password": pwd, "image": b64,"typeid": '27'}
    result = json.loads(requests.post("http://api.ttshitu.com/imageXYPlus", json=data).text)
    if result['success']:
        return result["data"]["result"]
    else:
        return result["message"]

获取Chrome驱动

下载地址:http://npm.taobao.org/mirrors/chromedriver/
要下载与电脑上Chrome浏览器版本一致的驱动,否则会报错

编写主程序

logging_bilibili.py
---
import time
from userandpasswd import USER_NAME,USER_PASSWD,KSB_PASSWD,KSB_NAME # 导入用户名和密码
from selenium import  webdriver  # 导入浏览器
from PIL import Image #用来剪切图像
from selenium.webdriver import ActionChains # 导入动作链模块
from kuaishibie import base64_api

add = "https://passport.bilibili.com/login" #bilibili登录地址
class loggin_in():
    def __init__(self,url):
        self.address = url
    def loginweb(self):
        # 创建一个浏览器对象
        driver = webdriver.Chrome(executable_path='chromedriver.exe')
        #打开请求的网页
        driver.get(self.address)
        #等待浏览器渲染加载页面完成,单位为秒,隐式等待
        driver.implicitly_wait(20)
        # 最大化浏览器
        driver.maximize_window()
        # 输入用户名
        user_input = driver.find_element_by_xpath('//*[@id="login-username"]') #用户名标签
        user_input.send_keys(USER_NAME)
        time.sleep(1.5)
        # 输入密码
        passwd_input = driver.find_element_by_xpath('//*[@id="login-passwd"]') #密码框标签
        passwd_input.send_keys(USER_PASSWD)
        time.sleep(1.5)
        #点击登录按钮
        logging_input = driver.find_element_by_xpath('//*[@id="geetest-wrap"]/div/div[5]/a[1]') #点击登录
        logging_input.click()
        #找到验证码对应的图片标签,如果用xpath取不到图片可以用css选择器
        img_label = driver.find_element_by_css_selector('body > div.geetest_panel.geetest_wind > div.geetest_panel_box.geetest_no_logo.geetest_panelshowclick > div.geetest_panel_next > div')
        #保存图片
        # img_label.screenshot('yzm.png')
        #无法完整保存点选图片的可以通过截取浏览器全屏,然后再从大图截取点选图片
        driver.save_screenshot('big.png') #截取全屏
        #获取点选图片的像素大小
        print('左上角坐标:'+str(img_label.location)) # location可以获取这个图片左上角坐标
        print('图片大小:' + str(img_label.size))
        print('图片高:'+ str(img_label.size['height']))     # size可以获取这个图片的宽(width)和高(height)
        print('图片宽:' + str(img_label.size['width']))
        #获取点选图片像素位置
        top = img_label.location['y']
        left = img_label.location['x']
        right = img_label.location['x']+img_label.size['width']
        down = img_label.location['y']+img_label.size['height']
        # 截取需要的点选图片
        im = Image.open('big.png') #打开图片
        im = im.crop((left,top,right,down)) #参数按照左,上,右,下
        im.save('yzm.png')

        #对接打码平台识别验证码
        code_result = base64_api(KSB_NAME,KSB_PASSWD,'yzm.png')
        print(code_result)
        result_list = code_result.split('|')
        for result in result_list:
            x = result.split(',')[0] #获取点选图片位置
            y = result.split(',')[1]
            ActionChains(driver).move_to_element_with_offset(img_label,int(x),int(y)).click().perform() #执行整个鼠标动作链
        driver.find_element_by_css_selector('body > div.geetest_panel.geetest_wind > div.geetest_panel_box.geetest_no_logo.geetest_panelshowclick > div.geetest_panel_next > div > div > div.geetest_panel > a > div').click()
        
        # input()   #阻塞浏览器不被关闭
        driver.quit() #关闭浏览器


if __name__ == '__main__':
    run = loggin_in
    run(add).loginweb()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值