SK-415 / HarukaBot

将 B 站的动态和直播信息推送至 QQ,基于 NoneBot2 开发
https://haruka-bot.sk415.icu
GNU Affero General Public License v3.0
822 stars 112 forks source link

关于被要求人机验证的建议方案 #416

Closed 250king closed 11 months ago

250king commented 1 year ago

HarukaBot 版本

v1.6.0.post5

功能建议

我们深知现在B站为防止bot爬取动态而添加了验证码。针对此情况,我想提出以下方案,希望对贵项目有参考价值:

额外信息(可选)

No response

x402 commented 1 year ago

Harukabot的前身DDbot好像用的是第二种方案(

搞错了,Harukabot前身叫dd-bot,上面说的用登录状态的是ddbot,另一个项目https://github.com/Sora233/DDBOT

250king commented 1 year ago

刚刚跟一位也是用Harukabot的群主讨论一下,他试过第二种方案,但两天后复现

其实我一直在想

如果说Web端真的无法解决,那只能App API试试了。目前该端口只要签名正确,就可以正常返回动态内容,但要自己生成图片

250king commented 1 year ago

现在还发现一个比较严重的问题:如果一个IP长期无法完成人机验证,会不停弹出来 Screenshot_2023-07-23-23-30-37-68.jpg

misaka10843 commented 1 year ago

我认为是需要PC UA+cookies+适当的请求延迟(尽量是在动态发出的3-5min后再访问动态页面),或者直接使用RSShub来获取动态内容,但是这样的话就会需要设计排版

misaka10843 commented 1 year ago

但是似乎使用PC UA也并不能解决问题 https://github.com/SK-415/HarukaBot/issues/366#issue-1705035992

所以个人判断是b站先检测是否登录,然后如果同一个浏览器一直都是访问动态类的话会查询最近几次是否为发布后的几分钟内就立即访问了(但是并没有进行验证x)

现在唯一能确定的是因为在一段时间内访问特定类型的页面次数过多导致的风控

250king commented 1 year ago

我认为是需要PC UA+cookies+适当的请求延迟(尽量是在动态发出的3-5min后再访问动态页面),或者直接使用RSShub来获取动态内容,但是这样的话就会需要设计排版

RRSHub不是几百年前就寄了?

misaka10843 commented 1 year ago

我认为是需要PC UA+cookies+适当的请求延迟(尽量是在动态发出的3-5min后再访问动态页面),或者直接使用RSShub来获取动态内容,但是这样的话就会需要设计排版

RRSHub不是几百年前就寄了?

并没有,活的好好的

250king commented 1 year ago

我服务器的IP被污染了,现在都是验证码(哪怕已经魔改源码,出于登录状态以及删除了过往的cookie) 最气的是在服务器远程打开浏览器又不弹出验证码

misaka10843 commented 1 year ago

我服务器的IP被污染了,现在都是验证码(哪怕已经魔改源码,出于登录状态以及删除了过往的cookie) 最气的是在服务器远程打开浏览器又不弹出验证码

尝试使用统一的UA打开试试

250king commented 12 months ago

哪种ua?

misaka10843 commented 12 months ago

机器人使用的什么UA就用什么UA打开,在我这边测试的时候是发现b站是封的IP下面的所有特定UA(但是大概率会连坐直接封IP

250king commented 12 months ago

疑似风控升级 Screenshot_2023-07-28-21-15-19-13.jpg

gq20110204 commented 12 months ago

看了下讨论 或许搞复杂了 如果用api去拿内容的话 其实还有一种更简单的解决方法 (应该算是漏洞? https://github.com/SocialSisterYi/bilibili-API-collect/issues/686#issuecomment-1624768240 参考这个issues 直接用网页api接口就行 只需要把ua设置成'Mozilla/5.0' 其他啥也不用传 直接就能绕过验证请求到内容 目前我自己写的爬动态视频脚本就在用这个方法 而且即使在被风控的情况下 用这个接口依旧可以稳定拿到内容(环境 家宽 和自己的脚本跑在同一个服务器)

我还发现了一个更奇怪的现象 风控机制似乎对版本很新的ua豁免? 电脑 最新版 chrome 115 不登账号也可以看到动态 (Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36) 手机 iPhone 系统版本相对较老 直接弹验证码 (Mozilla/5.0 (iPhone; CPU iPhone OS 15_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1)

250king commented 12 months ago

我用Postman不改ua,使用已经登录且正常的cookie也🉑

NAOLIU commented 11 months ago

我用Postman不改ua,使用已经登录且正常的cookie也🉑

请问大概怎么改,我这边用了UA还是频繁弹,我是haruka最新版,harukabot如何能够使用cookie?

250king commented 11 months ago

Cookie好像要等更新

其实现在只要单独更新bilireq库,以及设置其他ua就可以正常工作了。我现在暂时没有发现问题

QwindF commented 11 months ago

so,有详细的解决方案了吗

250king commented 11 months ago

https://github.com/SK-415/HarukaBot/issues/419#issuecomment-1658077606