【原来Python爬虫还可以这么玩!】python爬虫自动化实现B站自动登录

python + selenium 模拟登陆b站 文章目录截取验证码图片识别缺口模拟滑动爬坑代码相关优化参考资料 截取验证码图片 首先将鼠标移至小块处,会出现滑动后的图片(即原图) 利用selenium找到验证码图片所在元素 这样,我们就可以截取整个网页,再利用图片元素返回的位置和宽高,裁切出验证码图片并保存 点击小块并按住不放,出现带缺口的图片 通过同样的方法,可以利用selenium裁剪出带缺口的验证码 识别缺口 具体想法,比较两张图片... 阅读详情

从新开始吧,而不是重新开始

在这里插入图片描述
哈喽,大家好呐,很久不见,甚是想念!

小夜斗又和大家见面啦,距离小夜斗上次更新爬虫文章又过去了很久辽!

因为在学校的时候有太多事情要做了,就疏忽了博客的更新呐,感觉以后还是要日常更新,知识需要输入,更需要输出,这样子才能吸收其中的精华所在!

趁这次暑假期间给自己充能的同时,给大伙们分享一下自己的学习项目,一方面可以加强自己对知识的印象,另一方面可以给大伙们做一个参考,这就是双赢呐!

本期小夜斗给大家伙带来的是一篇破解B站滑块验证实现自动登录的项目,仅供学习参考使用呐,切不可做违法乱纪的事情!

获取图片模块参考了这位大佬CoreJT的博客(感兴趣的小伙伴可以去阅读原作呐,Python爬虫实战 | (15) 破解bilibili登陆滑动验证码):

在这里插入图片描述

想要获取这个项目源码的小伙伴们文末自行获取呐!

一:破解滑块验证码项目所使用的库

from PIL import Image  
from selenium import webdriver  
from selenium.webdriver.support.wait import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC, wait
from selenium.webdriver.common.by import By
import time
from selenium.webdriver.common.action_chains import ActionChains  # 引入Action
import base64
  • from PIL import Image :对图像的基本处理
  • from selenium import webdriver:实例化浏览器对象实现自动化
  • from selenium.webdriver.support.wait import WebDriverWait :等待
  • from selenium.webdriver.support import expected_conditions as EC:等待条件
  • from selenium.webdriver.common.by import By:定位方式
  • import time:睡眠时间
  • from selenium.webdriver.common.action_chains import ActionChains:动作链,拖动滑块
  • import base64:处理图片,编码

二:初始化参数

class BliBli():
    def __init__(self, url, username, password):
        """
        :param url: 登录网址
        :param username:  账号
        :param password:  密码
        """
        self.url = url
        self.username = username
        self.password = password

上述代码中声明了一个BliBli类对象,初始化参数需要传入登录网址url,以及你的账号和密码,B站登录入口网址如下所示:

https://passport.bilibili.com/loginfrom_spm_id=333.851.top_bar.login_window

三:登录接口

    def login(self):
        """
        模拟浏览器
        自动化插件配置,登录接口
        :return:
        """
        # 浏览器对象
        path = r'L:\python package\jupyter learn record\Spider chong\chromedriver.exe'
        browser = webdriver.Chrome(path)
        # 登录
        browser.get(self.url)
        # 窗口最大化
        browser.maximize_window()
        # 账号密码接口
        wait = WebDriverWait(browser, 10)
        username = wait.until(EC.presence_of_element_located((By.ID, 'login-username')))
        password = wait.until(EC.presence_of_element_located((By.ID, 'login-passwd')))
        # 输入账号密码
        username.send_keys(self.username)
        password.send_keys(self.password)
        # 点击登录按钮
        # TODO: 登录没反应
        login_press = wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="geetest-wrap"]/div/div[5]/a[1]')))
        print("正在点击登录按钮")
        login_press.click()
        print("登录按钮点击完毕")
        # 停顿
        time.sleep(1000)

这个login函数是登录接口一部分代码,因为还有一部分牵扯到另一些函数接口,就没有全部弄上来了,下文会给大家伙展示!

首先我们实例化了一个浏览器对象browser,用它模拟人来实现自动登录,首先输入账号,然后密码,点击登录!
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在输入账号密码点击登录后,会弹出来一个滑动验证码,这时你需要通过移动相应的图形到对应的缺口,如下图所示:

在这里插入图片描述

四:破解滑动验证核心模块

小夜斗个人感觉这个滑动验证模块其实没有那么难,我们所需要做的事情无非就是计算这个滑块到那个缺口所需要移动的距离,然后用浏览器模拟人去拖动就行了,然后最关键的地方,拖动到最后我们人为都是会停留一段时间的,想象一下你自己拖动模块时的感受,是不是很快的拖动过去,然后在停留1s到2s左右,最后都是能验证成功的!

那如何计算我们滑块所需要移动的距离呢?

我们先来看下面三张滑块验证图片,如下图所示:

第一张:即包含缺口又包含移动滑块

在这里插入图片描述
第二张:只包含缺口

在这里插入图片描述
第三张:一副完整的验证图片

在这里插入图片描述
很简单的思路:我只需要将第二张和第三张图片像素点进行对比,设置一个误差范围阙值,这样子是不是就可以知道缺口的大致位置

而且我们拖动滑动是左右拖动,因此我们只需要获取其x轴方向的位置即可

(一):首先我们来获取上述的三张图片

    def get_screen_image(self, wait, browser):
        # 带阴影的图片
        im = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.geetest_canvas_bg')))
        time.sleep(2)
        im.screenshot('./image1.png')
        # 执行JS代码并拿到base64数据
        # 不带阴影的完整图片
        JS = 'return document.getElementsByClassName("geetest_canvas_fullbg")[0].toDataURL("image/png");'
        # 获取图片信息
        im_info = browser.execute_script(JS)
        print(im_info)
        # 拿到base64编码的图片信息
        im_base64 = im_info.split(',')[1]
        print(im_base64)
        # 转为bytes类型
        captcha_1 = base64.b64decode(im_base64)
        # 保存图片
        with open('captcha_1.png', 'wb') as f:
            f.write(captcha_1)
            # 执行JS代码并拿到图片base64数据
            # 带阴影的图
            c_js = 'return document.getElementsByClassName("geetest_canvas_bg")[0].toDataURL("image/png");'
            im_info_1 = browser.execute_script(c_js)
            print(im_info_1)
            # 拿到base64编码的图片信息
            im_base64_1 = im_info_1.split(',')[1]
            # 转为bytes类型
            captcha_2 = base64.b64decode(im_base64_1)
            # 将图片保存在本地
            with open('captcha_2.png', 'wb') as f:
                f.write(captcha_2)

        captcha1 = Image.open('./captcha_1.png')
        captcha2 = Image.open('./captcha_2.png')
        return captcha1, captcha2

当滑块验证码弹出来,按f12检查元素,可以分别看到属性:
在这里插入图片描述
在这里插入图片描述
然后执行相应的JS代码拿到对应的图片,进行切割编码,将图片进行保存,用于后续的像素对比操作!

小夜斗在看滑块标签属性的时候发现:display属性后面的block改为none滑块为消失,另一个标签的none改为block缺口为消失,还有一个none改为block滑块和缺口都消失

在这里插入图片描述
在这里插入图片描述
(二):像素对比,寻找缺口位置

    def position(self, image1, image2):
        # 缺口离左侧的位置
        left = 60
        # x轴方向
        for i in range(left, image1.size[0]):
            # y轴方向
            for j in range(image1.size[1]):
                if not self.pixel_euqal(image1, image2, i, j):
                    left = i  # 找到缺口左边边界在x轴方向上的位置
                    return left
        return left

函数position功能是寻找缺口的x轴位置,传入参数image1与image2分别为不带缺口的图片和只带缺口的图片,为上述的第二张图和第三张图

我们定义了一个参数left,即缺口离最左侧的距离(人为的初始化一个距离,一定为60或者0都是可以的),x轴方向像素变量,y轴方向像素遍历,然后我们调用pixel_euqal函数来比对两张图片image1与image2,从而找到缺口对应的x轴位置赋值给left,最终返回left即滑块所需移动的x轴位置

    def pixel_euqal(self, image1, image2, x, y):
        # 获取两张图片像素点
        pixel1 = image1.load()[x, y]
        pixel2 = image2.load()[x, y]
        # 设置一个误差阙值
        threshold = 60
        # 每个位置的像素点有三个通道
        if (abs(pixel1[0] - pixel2[0]) < threshold and abs(pixel1[1] - pixel2[1]) < threshold and
        abs(pixel1[2] - pixel2[2]) < threshold):
            return True
        else:
            return False

(三)拖动滑块,完成自动登录

    def drag(self, browser, wait, gap):
        """
        拖动滑块方法
        :return:
        """
        # 定位圆形滑块的位置
        circle = wait.until(EC.presence_of_element_located((By.XPATH,'/html/body/div[2]/div[2]/div[6]/div/div[1]/div[2]/div[2]')))
        print(circle)
        # 拖到某个位置后松开
        # TODO:方法需要perform执行
        print("开始拖动滑块")
        ActionChains(browser).click_and_hold(circle).perform()
        # for i in track:
        #     ActionChains(browser).move_by_offset(i, 0).perform()
        ActionChains(browser).move_by_offset(gap, 0).perform()
        time.sleep(1)
        print("滑块移动结束")
        ActionChains(browser).release().perform()

定义了一个drag拖拉的方法,首先找到对应的原型滑块位置circle,然后用动作链去移动circle对象,我们移动的时候并不需要先加速后减速,直接移动过去即可,因为网站后台检测的是你最后的停留时间,如果你按照先快后慢那种移动,成功率还没有直接移过去然后停留一秒来的快

想象一下我们人是怎么移的,直接移过去,然后停留一下,同样的道理放在浏览器对象也是一样的

哦对了,缺口移动的位置left,还需要根据你自己的调整减去一个参数,这里小夜斗调整的参数为10,即滑块自己本身的大小,根据移动的需求人工微调即可,下面为login函数后半部分代码

        # TODO: 获取两张验证码图片
        captcha1, captcha2 = self.get_screen_image(wait, browser)
        # TODO: 缺口位置如何寻找?
        left = self.position(captcha1,captcha2)
        left = left - 10
        print(left)
        # TODO: 如何拖动滑块?

        self.drag(browser, wait, left)

        # 停顿
        time.sleep(1000)

本期博客就到此啦,感兴趣的小伙伴们不烦点赞收藏一波!

源码数据:关注微信公众号"夜斗小神社"后台回复"008滑块验证"

- 在这个星球上,你很重要,请珍惜你的珍贵! ~~~夜斗小神社

在这里插入图片描述

[Python] [Bilibili] B站历史弹幕爬虫 b站历史弹幕爬虫,以b站弹幕最多的天鹅臂视频为例。 阅读详情

相关推荐

Python爬虫入门与登录验证自动化思路

Python爬虫是通过编写程序自动访问网页并提取信息的技术,常用于数据抓取、信息分析和自动化测试。然而,爬虫开发中最具挑战性的是处理网站的登录验证,尤其是图片验证码。为了应对这一问题,开发者可以采用半自动化或全自动化的方式,利用打码平台自动识别验证码,并通过Selenium工具模拟用户操作。

littleschemer的博客 3766

Bilibili登入接口password参数逆向分析

进到it这个函数里头看,在函数的末尾处可以看到几个关键词,setPublicKey和encrypt,在此次下段点,果不其然,是一个典型的rsa加密,先new了一个a,然后通过设置publickey,最后调用encrypt对一个hash和密码明文的拼接值进行加密,然后返回加密后的password。有一点需要注意,rt方法的最后几行中也使用window对加密部分的代码进行导出,直接删掉即可,这部分都是可以删掉的。扣下来后,头部画圈的这部分其实不需要,直接删掉,然后将function(t)改成一个自执行的方法。

weixin_52807972的博客 2417

python爬虫之使用selenium爬取b站视频信息

前言 在之前提到爬虫时,我想到的步骤大多是: 查找要爬取内容的页面的url,使用requests库获取响应内容 内容为html源码则使用BeautifulSoup等工具解析html源码,得到想要的数据 内容为Json则直接转为Json对象解析 保存数据 但今天我发现了selenium这个工具,selenium是一套完整的web应用程序测试系统,可以用它来模拟真实浏览器进行测试。在爬虫中使用它的...

chenf1999的博客 1万+

【B站登录】

获取B站的client_id,和B站申请的。redirect_uri:跳回的链接地址。

Min_Fox的博客 574

爬虫登录状态保持实战:用Session和Cookies搞定需要登录的网站(以B站为例)

本文详细介绍了使用Python爬虫保持登录状态的两种方法:手动管理Cookies和使用Session对象,并以B站为例展示了实战操作。通过解析HTTP协议的无状态特性,讲解了Cookies和Session的工作原理,提供了完整的代码示例和常见问题解决方案,帮助开发者高效爬取需要登录才能访问的网站数据。

weixin_28686915的博客 2138

python+selenium爬取b站视频(得到登录后的清晰度)+绕过登录

之前写的简单的爬取b站视频时,发现下载的视频清晰度是的那种,影响后期使用。所以这次利用selenium启动chorme的浏览器驱动,先是获取到b站自己账号登录后的cookie进行保存,然后自动在浏览器中注入cookie,实现已登录的b站,最后爬取视频。不过,需要注意的是b站的最高清晰度是需要会员的,所以,都懂。

weixin_51410591的博客 2313

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

超详细,python+selenium+超级鹰打码平台实现b站的自动化登录。

qq_57410822的博客 3749

B站视频评论的爬虫与数据分析

1.通过爬虫将数据存储下来2.生成词云图非常直观的输出评论高频字眼3.生成柱状图和饼状图来分析B站视频评论3基本功能描述3.1基本功能实现了使用Selenium库进行B站视频评论的爬取,并将评论数据保存到CSV文件中。然后使用Pandas和其他相关库对评论数据进行了基本的数据分析和可视化。具体功能描述如下:1.使用Selenium库进行模拟浏览器操作,加载指定B站视频页面。2.使用XPath表达式提取页面中的评论内容和评论时间。3.将提取的评论内容和评论时间写入CSV文件中。

2201_75470660的博客 3937

Python | 爬虫 | selenium自动化测试 | b站点触验证码登录

python爬虫 | selenium | b站点触验证码登录

chatblanc的博客 2273

【python实战】怎么用python自动登录优快云

目录 先上效果 页面分析 引入selenium模块及驱动 1、并将安装好的Chromedriver.exe引入到代码中 2、浏览器驱动引入 爬虫模拟登录 1、设置网址链接 2、切换到账号密码登录 3、找到用户名密码的控件ID 4、注入用户名和密码 5、模拟登录点击 成功登录优快云 先上效果 页面分析 优快云登录页面如下图 引入selenium模块及驱动 1、并将安装好的Chromedriver.exe引入到代码中 # -*- coding:utf-8 -*-

信息安全领域优质创作者|操作系统领域专家 1万+

Python爬虫实战:模拟登录B站 – 处理Cookie和加密参数

由于B站在登录过程中采用了多种安全措施,包括加密的请求参数和cookie验证,模拟登录成为一项具有挑战性的任务。首先,我们需要获取B站的登录页面,并解析出其中的CSRF令牌和其他隐藏的字段。B站的登录接口通常会包含一些动态的加密参数,我们需要在登录前通过GET请求获取这些信息。本文详细介绍了如何使用Python模拟登录B站,解决加密参数的处理、图形验证码的识别以及登录后的数据抓取。库中的加密方法加密登录请求中的密码。一旦登录成功,我们可以通过维护会话状态,抓取登录后的数据,如个人主页、评论、观看记录等。

2201_76125261的博客 1309

手把手教你使用Python网络爬虫获取B站视频选集内容(附源码)

点击上方“Python爬虫与数据挖掘”,进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书今日鸡汤位卑未敢忘忧国,事定犹须待阖棺。大家好,我是Python进阶者。前...

pdcfighting的博客 2408

[Python从零到壹] 四.网络爬虫之入门基础及正则表达式抓取博客案例

欢迎大家来到“Python从零到壹”,在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界。所有文章都将结合案例、代码和作者的经验讲解,真心想把自己近十年的编程经验分享给大家。第四篇文章将开启网络爬虫之旅,首先介绍基础知识及正则表达式的爬虫,希望对您有所帮助,文章中不足之处也请海涵。

杨秀璋的专栏 2万+

Python 爬虫实战:爬取 B 站视频的完整教程

Python 爬虫是一种自动化工具,用于从互联网上抓取网页数据并提取有用信息。因其简洁的语法和丰富的库支持(如 requests、BeautifulSoup、Scrapy 等),Python 成为实现爬虫的首选语言之一。指定 url发送请求获取目标数据数据解析本文将以 B 站视频为例,详细介绍爬取视频的实现过程。正确设置请求头信息以绕过反爬机制准确定位音视频资源的 URL 地址分别处理音频和视频的下载与保存。

2302_76756558的博客 4746

使用Python爬虫模拟登录B站并抓取数据

B站(哔哩哔哩)作为中国最大的二次元和多元化内容平台,拥有庞大的用户群体和丰富的内容。在数据科学、网络爬虫以及社交网络分析的研究中,B站的数据一直是研究人员的重要数据源。为了获取B站的视频、评论、用户信息等内容,我们可以使用Python爬虫技术。本文将详细介绍如何通过模拟登录B站,绕过其反爬虫机制,并抓取指定的B站数据。本文详细介绍了如何使用Python模拟登录B站,绕过其反爬虫机制,并抓取B站的数据。我们使用了requestsSelenium等工具,并结合反爬虫策略,成功抓取了B站的热门视频内容。

2201_76125261的博客 1301

Python3实现京东自动化操作:登录、查价、加购、下单、秒杀

htmltable {th, td {th {pre {简介:本项目展示了如何使用Python3及其库在京东平台上实现自动化操作,包括扫码登录、价格监控、购物车添加、下单流程及参与秒杀等。涉及的技术点包括使用Selenium进行浏览器自动化、requests库进行HTTP请求、BeautifulSoup解析HTML内容以及处理异常和反爬策略等。通过该项目,开发者可以学习到如何运用Python进行高效的网络爬虫开发和自动化脚本编程。

weixin_35756373的博客 1762

Python之Selenium自动化爬虫

文章目录Python之Selenium自动化爬虫0.介绍1.安装2.下载浏览器驱动3.实例4.开启无头模式5.保存页面截图6.模拟输入和点击a.根据文本值查找节点b.获取当前节点的文本c.打印当前网页的一些信息d.关闭浏览器e.模拟鼠标滚动7.ChromeOptions8.验证滑块移动9.打开多窗口和页面切换10.Cookie操作11.模拟登录12.优缺点 Python之Selenium自动化爬虫 0.介绍 Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,Selenium 可

Harris-H的博客 1万+

INCA基础教程

以软件自带Demo为例记录INCA学习过程,主要内容包括测量与标定。

yunqianrui的博客 6万+

B站升级协议实现—Python

b站自动升级协议保姆级教学——每日自动登录、观看视频、投币、分享视频获取全部每日经验思路,通过B站获取经验的规则,登录、观看视频、投币、分享视频均可获得经验

xk 2405

OpenClaw 报错 TypeError: Cannot read properties of undefined (reading ‘prototype‘):Node.js 版本不兼容

国产化环境中部署OpenClaw云边协同平台时,出现"TypeError: Cannot read properties of undefined (reading 'prototype')"报错。经分析发现根本原因是Node.js版本与依赖生态不兼容,新版本Node(如v21)移除了旧依赖使用的内部API。解决方案包括:1)使用nvm切换至兼容的Node 16/18 LTS版本;2)容器化部署固定Node版本;3)遵循官方推荐的引擎版本范围。该问题揭示现代工程中版本管理的重要性,

博客 2313

当AI写小说——一个被严重低估的工程化战场

摘要 AI小说创作远非简单的prompt生成,而是一项需要系统化工程管理的复杂任务。本文通过真实案例分析,揭示了当前AI写小说存在的五大核心难题:设定一致性难以维持、文风控制缺乏个性、爽感节奏难以把握、长篇记忆能力有限以及平台规则适配困难。研究显示,90%的失败案例源于错误的创作方法,主要表现为对话框式随机生成和模板式同质化创作。要实现高质量的AI小说创作,必须建立包括设定治理、记忆管理、文风校准等在内的全链路工程化体系,而非依赖单一prompt指令。只有采用系统化的人机协同方法,才能突破当前AI创作的质量

sellyogurt的博客 683
上一篇: 【爬虫老司机手把手教你如何分析用户数据|Python 数据分析打怪升级之路 day05】:数据规范化这样做才规范、数据可视化十大图表
下一篇: 【手把手教你玩转极验滑块JS逆向系列】(一):滑块底层图片还原
夜斗小神社
博客等级 码龄7年 3718粉丝 67原创
评论 36
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值