自己编写selenium脚本自动化下载B站视频

2021-11-09 08:49:37 58点赞 589收藏 49评论

创作立场声明:本篇文章为笔者个人的学习实践笔记,仅供学习交流使用。

如今B站上的视频资源无所不包,有很多指的收藏的内容。比如说3b1b的数学讲义让晦涩的高等数学的教学达到了一个新高度。不仅我叹为观止,我也想留下来让我的孩子从中受益,所以仅仅三连收藏就很不踏实。于是我就想寻找一些途径下载到本地。

途径倒是不难找,HotBox就是很棒的下载途径,这是一个工具类网站,提供了流媒体下载、http文件离线下载、磁力链接离线下载三个大功能,使用起来丝滑流畅,收费也很合理,1美元就可以有一个月250G的下载额度,这对我来说已经非常充裕了。需要注意的是,我个人没有下载付费视频的需求,所以这套方案仅针对非付费视频。

自己编写selenium脚本自动化下载B站视频

自己编写selenium脚本自动化下载B站视频

手动操作步骤:

1.将视频页面的地址粘贴在流媒体功能的地址栏里,右边就会开始解析。

自己编写selenium脚本自动化下载B站视频

自己编写selenium脚本自动化下载B站视频2.解析好以后就能看到你可以下载到的视频内容,可以看到还有各种清晰度可以选。

自己编写selenium脚本自动化下载B站视频

自己编写selenium脚本自动化下载B站视频3.选择希望下载的清晰度后,点“离线下载”,hotbox就会帮你把视频下载到他的服务器上。下载完成后按钮会变成“下载视频”和“提取音频”。

自己编写selenium脚本自动化下载B站视频

自己编写selenium脚本自动化下载B站视频4.点击你需要的按钮后,就进入了下载链接页面,有欧洲和北美两个区可选,我这欧洲比较快,于是点击欧洲。

自己编写selenium脚本自动化下载B站视频

自己编写selenium脚本自动化下载B站视频5.点击后你就可以看到浏览器已经开始下载文件了。体验极好。

自己编写selenium脚本自动化下载B站视频

自动化选型:

但是这时候问题只解决了一半,因为在使用初期我有大量视频想要下载,手动操作倒是不难,但是离线下载需要时间,在下载一些没有缓存的资源时,500M的资源需要等10分钟左右。数量少的话还可以忍受,但收藏夹有上百个视频想要下载,人就吃不消了。这时候就得上脚本了。

自动化工具我使用selenium,这位可以说是自动化测试领域的顶级工具了。虽然说是自动化测试工具,但功能过于强大,早就不仅仅是用来测试了。他工作的原理是使用chrome官方提供的自动化驱动工具(webdriver)帮你打开一个chrome(或别的浏览器)实例,然后根据你写的脚本通过webdriver在浏览器上完成进入网站、点击链接、输入文字等等操作。

我本人是程序员,对于selenium还是比较熟悉的,而上述整个操作流程对于selenium也没什么大的障碍。这里需要强调一点,现在很多网站有验证码,这种机制就是为了防止自动化而生的,说明网站不希望你自动化这个流程,所以不要试图破解验证码(虽然在某种程度上是可以做到的),但是遇到这种情况时你应该留出时间让“人”来输入验证码,如果你发现不破解验证码你的自动化过程就是去了意义,那说明你不应该自动化这个流程。这一点在selenium官网上也明确得表达了出来。

实现脚本:

目前selenium支持多种语言,java、python、ruby、js都可以,我最近在学习js,于是使用了js版本。需要吐槽的是,官网上的文档非常不系统,你甚至没办法根据官网的文档把环境给搭起来,还得自己上google搜,很多用法细节还得自己看源码才能知道怎么用。

1.搭建环境。

1.1 nodejs环境

因为选择了js作为编程语言,所以需要先搭建nodejs环境。node的安装不再赘述了,很多教程比我写的好。

1.1.1 进入nodejs官网https://nodejs.org/en/,选择LTS(长期支持的稳定版)

1.1.2找一个位置安装nodejs。

1.1.3设置环境变量。我自己的环境变量如下图所示。供参考。

自己编写selenium脚本自动化下载B站视频

1.1.4验证nodejs 是否生效了,在设置完环境变量后打开一个新的cmd控制台,在上面输入node并回车,如果能正常进入交互式命令行环境,就说明安装成功了。

自己编写selenium脚本自动化下载B站视频

1.2 下载vs code。

vscode是微软出的开源代码编辑器,在软件行业,前端工程师基本就用这个来敲代码。

进入https://code.visualstudio.com/ 网站,直接下载。下完安装也很简单,不再赘述。

自己编写selenium脚本自动化下载B站视频

1.3 rest请求工具。

因为我的脚本是挂在http服务上的,这样可以为以后更多的自动化功能留出空间,所以为了调用他你还需要一个能发送http请求的工具——insomnia。 直接进入页面https://insomnia.rest/pricing 下载。

自己编写selenium脚本自动化下载B站视频

自己编写selenium脚本自动化下载B站视频

然而下载的时候发现网络很差,因为是在github上,被qiang了,即使连通了速度也非常慢。那怎么办呢?这不是巧了吗?我们有hotbox啊!把下载失败的页面地址粘贴到hotbox的http文件下载功能上。一顿操作后,直接搞定。安装不再赘述了,安装完打开就行。

自己编写selenium脚本自动化下载B站视频

自己编写selenium脚本自动化下载B站视频

打开以后各种弹框能关就关,能跳就跳。然后点击右上角,新建请求集,起个名字点create。

自己编写selenium脚本自动化下载B站视频

自己编写selenium脚本自动化下载B站视频

然后新建一个请求,起个名字,然后设置请求方式为post,后面的content-type选json,很关键,不然调不通。

自己编写selenium脚本自动化下载B站视频

自己编写selenium脚本自动化下载B站视频

顺便吐槽,这种工具最著名的叫做postman,但是他现在非常不思进取,界面臃肿、功能蹩脚、反映迟钝,就在我调试这个脚本时还出现了bug,导致我白白耗费了一小时才发现是postman的问题。

2.构建项目,编写脚本,运行服务。

项目代码上传到了百度云上,因为只是个小脚本就不传github了。

链接: https://pan.baidu.com/s/1y8b9TzXtqiR4X_cctK7NSQ
提取码: 6rse

之前自己学习nodejs时使用了koa2框架搭建了后端服务,这次直接把项目的壳子扒下来用了。这篇文章不是技术文章,就不展开了。剩下的就是写代码,脚本逻辑主要写在web-driver.js文件里面。这里面的参数需要针对自己的情况进行修改。如下所示,第一个红框是你希望把文件下载到的目标目录,第二个红框是你在hotbox的帐号密码。

自己编写selenium脚本自动化下载B站视频

第三个红框是用来锁定你要下载的视频版本,这个的原理是标记视频版本列表中从上到下的顺序,所以从上倒下依次如下图所示,,每个视频的版本列表都有差异,目前脚本里锁定了第二个版本也就是480p,你如果觉得不够,就把dlIcon1改成dlIcon3以获取1080p的版本。但如果这个视频没有1080p版本,那脚本会执行失败,然后跳过这个视频,进行下一个视频的下载。

自己编写selenium脚本自动化下载B站视频

代码改好以后,在左边项目文件夹上右键,选择打开命令终端。然后界面下方会有个命令行弹出来。

自己编写selenium脚本自动化下载B站视频

自己编写selenium脚本自动化下载B站视频

在上面先后输入下面两句命令,第一条是把下载源换成国内的,第二条是开始下载这个项目依赖的第三方包:

npm config set registry https://registry.npm.taobao.org/
npm install

执行时的截图如下:

自己编写selenium脚本自动化下载B站视频

结束后看到如下这种说有多少包已经被安装的提示,就说明成功了。如果有错误的话就说明没通过,这就要具体情况具体分析了。

自己编写selenium脚本自动化下载B站视频

这一步成功后代表着代码已经准备好了,下一步就可以开始运行了。

3.运行脚本。

构建好代码后,还需要核对一下你在hotbox上的下载额度是不是充足,不然执行到一半发现没流量额度了,你还得重新跑一遍脚本。

1.输入npm run dev命令,你会看到命令卡住了,这就对了,说明服务已经起来了,服务监听的是3000端口,现在就已经可以向服务发送请求了。

自己编写selenium脚本自动化下载B站视频

2.转到insomnia上,如下图设置。在地址栏上输入:http://localhost:3000/api/crawl ,在下面的body中写入一个

类似json格式的报文,报文格式如图所示,就是一个个视频编号,视频编号你可以打开B站视频的网页,从地址栏上获取,也可以在app上点分享,然后选“复制链接”得到视频号。重点提示:json报文的格式很严格,注意逗号和引号的使用,核对好后再发送请求。

自己编写selenium脚本自动化下载B站视频

核对好报文信息后,点击send按钮,然后右面会出现一个读秒,因为连接已经通了,过以小会儿你就会发现屏幕上出现了一个chrome窗口,并提示“Chrome正受到自动测试软件的控制”,然后页面上会出现登录页面,你的用户名密码会被自动填写到登录页面上,然后开始按你给的视频号逐个下载视频。

自己编写selenium脚本自动化下载B站视频

自己编写selenium脚本自动化下载B站视频

下载成功后你可以在你指定的目录下看到下载好的视频,在命令行上也有相应的日志输出。

自己编写selenium脚本自动化下载B站视频

总结:

写这篇文章之前就是想分享个脚本,没想到有这么多内容需要交代,想想毕竟是要搭建一套编程语言的编辑和执行环境,所以还是需要很多耐心和知识储备的。对于没有编程基础的朋友,可以用在这个项目上感受一下自己运行程序脚本的乐趣 ,对于有编程能力的朋友,可以给你省下一些搭建环境和琢磨API用法的时间,大家各取所需,共同进步吧,。最后强调一点,这个脚本仅针对个人少量视频的下载使用,这个脚本并没有,也不应该具有作大规模资源下载的能力。

展开 收起
49评论

  • 精彩
  • 最新
  • 搞那么麻烦,直接在360浏览器插件目录搜索“b站助手”,安装后刷新b站页面,右边出现助手,图标,点击选择迅雷下载,完事。如果你有大会员,还可以下载超高清4k。

    校验提示文案

    提交
    作者是收藏夹批量下载吧,不是单一下载

    校验提示文案

    提交
    哔哩哔哩助手,b站下载助手,都可以。

    校验提示文案

    提交
    还有6条回复
    收起所有回复
  • 这个太重了吧,yt-dlp 就行了

    校验提示文案

    提交
    看了下这个确实可以,能解决我的问题,以前不知道

    校验提示文案

    提交
    收起所有回复
  • 都写代码了,直接上爬虫吧,用docker做分布式,挂代理,一晚上就妥了

    校验提示文案

    提交
    那不就是又写了一个hotbox嘛 [抠鼻]

    校验提示文案

    提交
    收起所有回复
  • brew install annie
    annie xxxx

    校验提示文案

    提交
    批量下载可以这样
    annie -F URL.txt

    校验提示文案

    提交
    ubuntu可以apt install annie

    校验提示文案

    提交
    还有2条回复
    收起所有回复
  • 软件可以分享一下吗?谢谢

    校验提示文案

    提交
    上传网盘了,文章里有

    校验提示文案

    提交
    收起所有回复
  • 我有个朋友,想问一下能不能下其他的网站 [高兴]

    校验提示文案

    提交
    p打头的吗,我也有个朋友问同样问题

    校验提示文案

    提交
    我有个朋友,是通过谷歌浏览器+油猴的脚本搞定的 [脸红]

    校验提示文案

    提交
    还有2条回复
    收起所有回复
  • b站自己有唧唧,一毛钱也不要,他不香吗?

    校验提示文案

    提交
    web端已经不提供服务了,也还是没办法批量

    校验提示文案

    提交
    收起所有回复
  • 程序员楼主,问个其他问题,那种时不时暂停然后需要验证的网课怎么挂机,验证方式有图片旋转和评分等,太特么烦了

    校验提示文案

    提交
    既然有验证码那就基本上没有自动化方案,毕竟人家就是想到了你要挂机,所以设计的这套机制。

    校验提示文案

    提交
    收起所有回复
  • 我一个测试看到把selenium这么用都头大 [皱眉] 而且看了下后面的,登录过程可以通过抓一次cookie代替

    校验提示文案

    提交
    在有验证码的情况下保留cookie是很必要的,这个hotbox不需要验证码,每次登录稳定快捷,所以没弄

    校验提示文案

    提交
    收起所有回复
  • 去的掉logo水印不???大神

    校验提示文案

    提交
    平台强制的啊,去不掉

    校验提示文案

    提交
    我有个办法可以去掉。但我不会写程序。

    校验提示文案

    提交
    收起所有回复
  • 抓几个接口比你这个方便。不用一点点调试

    校验提示文案

    提交
    不知你做过爬虫没,调试接口的成本远大于从UI上进行操作,唯一的好处是调通以后容易在linux上规模化部署。

    校验提示文案

    提交
    收起所有回复
  • selenium还是算了吧, [喜极而泣] [喜极而泣] ,上家公司用selenium爬一些数据慢的一批,这玩意加上Chrome内存爆炸。还是我直接抓了接口,写个python脚本分分钟完事的 [大囧] [大囧] 还好离职的早 [皱眉]

    校验提示文案

    提交
    成年人只看利弊,效率和内存换来的是开发标准化和极强的隐蔽性

    校验提示文案

    提交
    收起所有回复
  • 开始的时候:嗯,有网站250g每月,看来很简单……接下来:楼主是程序员,似乎不会一步步讲解,有点难……最后:放弃了,有网盘邮箱吗,***

    校验提示文案

    提交
  • 用Tampermonkey难道不香吗

    校验提示文案

    提交
    油猴插件下载不了哇,大神有详细教程吗?我不是程序猿我是土木狗

    校验提示文案

    提交
    收起所有回复
  • 嗯,好像有点贵,比我之前用的一个贵点,如果只是下载BT或者PT,seedbox有更好的选择,1-10T流量还是G管的,我不是他的目标用户就是了

    校验提示文案

    提交
  • downkyi也可以

    校验提示文案

    提交
  • 太麻烦了 you-get不香吗

    校验提示文案

    提交
  • Annie / youtube-dl

    校验提示文案

    提交
  • youget 不是更好

    校验提示文案

    提交
  • 唧唧下载器

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
589
扫一下,分享更方便,购买更轻松