aikangkang
aikangkang
参考这篇[播客](https://blog.csdn.net/qq_41009507/article/details/122953184 )
> w参数怎么来? w可以直接不填。也是有概率获取失败,失败的话重试几次应该就好了。
> 说一下我已知的部分吧,米哈游用的是geetest极验作为人机验证,目前用的是`智能组合验证`,目前会出现3种验证形式,分别是`文字点选验证`、`滑动拼图验证`、`直接过`,其中我这边遇到次数最多的是`文字点选验证`,另外两个验证随机出现,在经过大概14d?左右后出验证码的账号就不会出验证码了 我这边的情况是通过这种方式。不填w。就像上面说的那种只填几个。大多数账号都是重试两次就好了。第一次获取gt和challenge,第二次获取validate后,带上请求头重试就可以了。 有的个别账号获取validate的时候会返回空,重新发送请求获取新的challenge和gt,然后继续重试个4次左右好了。也有的需要重试更多次。
> 说一下我已知的部分吧,米哈游用的是geetest极验作为人机验证,目前用的是`智能组合验证`,目前会出现3种验证形式,分别是`文字点选验证`、`滑动拼图验证`、`直接过`,其中我这边遇到次数最多的是`文字点选验证`,另外两个验证随机出现,在经过大概14d?左右后出验证码的账号就不会出验证码了 就像您说的,米哈游的3种验证形式里面有概率出现直接过的情况。在米游社中签到就算触发另外两种情况,也是不需要一定完成验证的,我一般触发验证然后关闭,再触发再关闭,重复重试几次可能再点可能就直接成功了。 这个重试的过程大概就像这个重试的过程吧。
> https://github.com/Womsxd/AutoMihoyoBBS/tree/captcha_pass 测试性分支 这个分支我看了下,有一点问题。那个获取validate的接口返回的结果是 geetest_1663984420850({"status": "success", "data": {"result": "success", "validate": "bfc115aebb30742960963970b082a318", "score": 1}}) 这样的,需要把前缀和后缀括号给去掉。然后再转换成json json.loads(req.text.replace("geetest_1663984420850(", "").replace(")", "")) 
> https://github.com/Womsxd/AutoMihoyoBBS/tree/captcha_pass 测试性分支 @Womsxd 然后我这边今天就剩一个没签到的账号了,打印了几个日志,试了下,如下:第二次重试就出结果了。应该没啥问题。明天再试下其他的号。 
> 测试通过,但是对需要签到的账号数量过多就没办法了,大概可以成功4-5个,一段时间内(5分钟左右) 有的号可以需要多次重试。 我这边今天签到了110个账号,好几轮签到下来。只有1个始终不行。其他的都签到成功了,那一个始终获取不到validate。 感觉可能还是得结合手动签到ua一起处理。可能仅仅可以提高签到成功的概率。 明天再观察下。
> > > 测试通过,但是对需要签到的账号数量过多就没办法了,大概可以成功4-5个,一段时间内(5分钟左右) > > > > > > 有的号可以需要多次重试。 > > 我这边今天签到了110个账号,好几轮签到下来。只有1个始终不行。其他的都签到成功了,那一个始终获取不到validate。 > > 感觉可能还是得结合手动签到ua一起处理。可能仅仅可以提高签到成功的概率。 > > 明天再观察下。 > > click吗?那个一直获取失败的,我这边有个号前面跑完4个后无法获取validate,看输出是要过点击验证码(不是滑块),等5分钟后就直接过了 对头,那个号一直click获取失败。我这睡一觉起床后再签到发现已经签过到了,签到的日志也莫得。 也不知道是号主自己手动签到的还是咋回事就签过了。。。
> > > > 测试通过,但是对需要签到的账号数量过多就没办法了,大概可以成功4-5个,一段时间内(5分钟左右) > > > > > > 有的号可以需要多次重试。 > > 我这边今天签到了110个账号,好几轮签到下来。只有1个始终不行。其他的都签到成功了,那一个始终获取不到validate。 > > 感觉可能还是得结合手动签到ua一起处理。可能仅仅可以提高签到成功的概率。 > > 明天再观察下。 > > click吗?那个一直获取失败的,我这边有个号前面跑完4个后无法获取validate,看输出是要过点击验证码(不是滑块),等5分钟后就直接过了 @Womsxd 这次我是真破解了, w参数的加密流程基本分析的差不多了。加密教程可以参考这个[视频](https://www.bilibili.com/video/BV1ES4y187n4/?spm_id_from=333.788.top_right_bar_window_history.content.click&vd_source=163ecc16e65f28a73bf49796fb02ba84) 不过他也有一些讲的不清楚的地方,需要用到python的ddddorc库,识别文字的位置,虽然没有经过炼丹准确率不高,但经过重试碰到2字验证码还是大概率能成功的。具体加密w参数的方法还挺复杂的,需要ddddorc先识别出文字的位置坐标,然后传gt,ch,c,s,pic五个参数就可以加密成w了。 
但加密w的流程有点太长了,6000多行代码,不好直接放这里,有问题可以继续沟通。