Hellager / weibo_supertopic_sign

基于Python/Nodejs的微博超话签到脚本,支持云函数运行或青龙面板运行
MIT License
94 stars 39 forks source link

请问下怎么回事 #20

Open forchannot opened 2 years ago

forchannot commented 2 years ago

编辑,使用test文件出现如下信息 image

Screenshot_2022-10-27-19-26-28-604_com guoshi htt image 刚抓的新鲜的,但是并没有签到

Hellager commented 2 years ago
  1. 挂青龙的话还是建议用 nodejs 版本,正常运行长这样 normal
  2. python 运行 test 请看注释顺序查看生成的 json 文件,目前怀疑可能是拆 cookie 提取参数的时候出现了问题,查查看你的 data/request_params.json 里拆完的参数和你抓包的参数是否一致,或者直接 debug 模式跑打个断点看看收到的 cardlistInfo 长什么样子,结构可以参考这张图 cardlistInfo
forchannot commented 2 years ago

我用你的脚本直接跑不会自动生成json文件,我去手动创建空白文件后handled_follow_list.json,sign_list.json,sign_result.json也都不会写入数据,nodejs跑好像签不了,估计是有验证码

forchannot commented 2 years ago

其中request_params.json里面长这样 image row_follow_list.json长这样 image

Hellager commented 2 years ago

你是不是安卓的?把函数这里的 User-Agent 改成你抓包拿到的 User-Agent

def test_get_follow_list(cookie):
    headers = {
        'Accept': '*/*',
        'Host': 'api.weibo.cn',
        'Accept-Encoding': 'gzip, deflate, br',
        'User-Agent': 'WeiboOverseas/4.4.1 (iPhone; iOS 14.7.1; Scale/3.00)',
        'Accept-Language': 'zh-Hans-CN;q=1, en-CN;q=0.9',
    }
forchannot commented 2 years ago

debug模式cardlistINFO里面没有信息 image

forchannot commented 2 years ago

我试试

forchannot commented 2 years ago

image image 8FWW5`HON5S5V$VQ0`RH1G 依然不行

Hellager commented 2 years ago

首先还是说明下版本问题: python 版本你可以理解为为了云函数定制的,为了避免云函数单次运行时长限制会需要多次运行 nodejs 版本是为了青龙的运行定制的,一次性签到所有函数 其次我也跑了一遍本地测试,你的请求参数里比我的多出来了两个参数, 不知道是为什么,把他们删了试试 超话请求参数.png

forchannot commented 2 years ago

我把多余的参数删了也不行,多余的参数是抓包就有的,我抓包得到的请求头是这样的,你看有帮助吗 PXVHE_`)(_7GD2}A8_4%Q5X

forchannot commented 2 years ago

我用js版本本地跑了下试试,显示这个但并没有签到成功 image

Hellager commented 2 years ago
  1. 你的响应是什么?或者你尝试抓签到某个超话的包,关键词应该是 button
  2. 现在重放请求的话也能得到相同的响应吗?
  3. 抓包软件重放请求能得到正确结果的话尝试把 test 运行过程中涉及网络请求的所有参数都改成和你抓到的包的参数一致,然后继续进行测试
Hellager commented 2 years ago

我用js版本本地跑了下试试,显示这个但并没有签到成功 image

Node 版本也别忘了该 User-Agent,我估计 debug 打断点这里的 cardlist 还是客户端校验失败

forchannot commented 2 years ago
  1. 你的响应是什么?或者你尝试抓签到某个超话的包,关键词应该是 button
  2. 现在重放请求的话也能得到相同的响应吗?
  3. 抓包软件重放请求能得到正确结果的话尝试把 test 运行过程中涉及网络请求的所有参数都改成和你抓到的包的参数一致,然后继续进行测试

这是我抓签到一个超话的包,手动签到过程中触发了验证码,目前看来是geetest验证码。至于重写和重放我不是很会用,不知道该怎么用 ` )7SNYHRE8@2Q5KKZ 1V~Q

这个是抓签到的包的响应 P%IPPBAQ{Y UYUJ)WV`S5ZY

Hellager commented 2 years ago
  1. 你这个是响应头,主要看响应内容
  2. 目前来看因为你说只是签到就会触发验证码,那估计是和你账号关系比较大,当然也只是个猜测
  3. 有关重放,因为我不知道你的 app 是什么,我拿 Stream 做个例子
  4. 至于为什么要测试重放,你可以这么理解:脚本的目的是创建和你用手机签到时产生的所有参数都一样的网络请求,我写的程序当然对应的是我能跑通的请求,不一定适用于你的;由手机客户端直接生成的网络请求也不一定能独立于客户端而直接发送。
  5. 所以既然你现在由遇到客户端校验失败的问题,也的确和我用的不是一个平台的客户端,那这部分参数的设置和可用性就需要你自己来单独测试。而如果你能在抓包软件重放请求并成功响应,说明问题不在客户端了,那我们可以继续讨论脚本程序的问题,如果重放不成功,那说明问题就在你的账号或者客户端了,这部分就是我也无能为力的了。或者你有条件借台 iphone 登下微博轻享版然后 stream 抓包,拿到参数再用脚本跑看看能不能成功。 找到重放.png 运行重放.png
forchannot commented 2 years ago

3RUE60P{6PIA8U8{M4J }FA 这样就算是重发成功了吧,里面也有请求和响应和之前一样的

forchannot commented 2 years ago

我发现了,脚本没有把c参数写进去,我把c参数自己写进去然后把请求头全部换成自己的能返回正常信息但是签到依然是失败估计验证码,而且time.clock()在python3.8后不在支持,我全部改为了time.perf_counter()。至于脚本为什么没写入c参数我不清楚,我的url是包含了c参数的

forchannot commented 2 years ago

image 按照上一条回复执行后是这样的,就是签到不成功,看来号不行,有无考虑加入geetest验证的破解呢?

Hellager commented 2 years ago

那和账号关系比较大,geetest验证因为没遇到过,也没法测试,暂时搞不定 或者考虑试试这个方法 基于Chrome插件的微博超话自动签到

forchannot commented 2 years ago

必须得手动过一次geetest验证,只要手动过了所有脚本都能签到,但是没过任何脚本都没用,就很烦

Hellager commented 2 years ago

目前能想到的就三种

  1. 用 python + seleuim 自己写段脚本,这样就可以搞定验证码
  2. 既然是安卓系统也可以用按键精灵吧?
  3. 用我上述那个浏览器插件签到,或者试试 AutomaApp, 今天刚知道,还没试过
forchannot commented 2 years ago

插件不行,电脑会提示异常,只有手机才能过验证

Hellager commented 2 years ago

那还是试试脚本精灵吧,好不好用就不知道了,我也没试过