Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

知乎反爬似乎已经升级 #4

Open
Joenothing-lst opened this issue Aug 11, 2022 · 18 comments
Open

知乎反爬似乎已经升级 #4

Joenothing-lst opened this issue Aug 11, 2022 · 18 comments

Comments

@Joenothing-lst
Copy link

headers参数x-zse-93似乎已经由101_3_2.0升级为101_3_3.0

@Joenothing-lst
Copy link
Author

我这里的测试情况是101_3_2.0相关的解密代码已经不能用了

@niuniuJQKKK
Copy link
Owner

headers参数x-zse-93似乎已经由101_3_2.0升级为101_3_3.0

这个加密方式应该还是一样的,只是参数变了吧。之前也都有升级

@Joenothing-lst
Copy link
Author

我测试是返回请求有风险,阻止了本次请求

@zhouyuchong
Copy link

@niuniuJQKKK 你好,我拿到了加密的js文件,但是复制替换项目中的js代码后会报错

execjs._exceptions.ProgramError: TypeError: __g._encrypt is not a function

好像您项目中的这个encrypt.js采取了一些处理,可以麻烦您分享一下吗。
这是zhihu最新的加密js文件

@niuniuJQKKK
Copy link
Owner

@zhouyuchong 你可以看看加密参数是否正确。目前该项目,在我的环境是能正常采集的

@niuniuJQKKK
Copy link
Owner

@zhouyuchong page_iterators.py 第一个函数有一个写死的参数。你看看是否是这里的问题

@niuniuJQKKK
Copy link
Owner

@Joenothing-lst page_iterators.py 第一个函数有一个写死的参数。你看看是否是这里的问题

@john-Ly
Copy link

john-Ly commented Sep 25, 2022

同样101_3_2.0已经无法使用 3.0版本的加密js文件摘出来也不能用

  1. 2.0js加密的密文是固定的 3.0 每调用一次加密就变化一次(这个原理不了解。。。)
  2. 在浏览器控制台 找到比如 answer的fetch api 点击 浏览器返回的json结果也是error 不像以前是可以返回data数据的json

@botissue
Copy link

2.0签名后是44位,3.0签名是68位。分享一下3.0可运行的js:
encrypt.js.zip

调用方法:

ctx1.call('D', fmd5)

但是可能还存在其他需要修改的地方,目前只能报错:

{'error': {'message': '请求参数异常,请升级客户端后重试', 'code': 10003}}

@john-Ly
Copy link

john-Ly commented Sep 25, 2022

@botissue 3.0js代码一致 我是按照2.0改的 没啥问题 同样响应有错误
之前2.0加密能用 就没管 但是那个时候知乎的前端ajax请求就已经用3.0了

@botissue
Copy link

对,就是前几天突然不能用了,那时候3.0已经上线了一段时间。现在网页上的API是这种形式:

https://api.zhihu.com/questions/477754936/feeds?count=5&cursor=50ec0b63022b8ff0972fc6a8cd701fa5&order=votenum&session_id=1654319147986710793&show_detail=1&count=10

估计以前的API就是个蜜罐,浪费大家的时间。最好研究现在的API,相关讨论:

srx-2000/spider_collection#32

@niuniuJQKKK
Copy link
Owner

@zhouyuchong js没有特殊处理啊。这个爬虫我构建好之后,就丢给组员去维护了。加密如有升级,替换最新的js加密就好了

@zhouyuchong
Copy link

@niuniuJQKKK @john-Ly 最新的js加密似乎能检测出是否人为操作。同样的加密函数,用js编译器自动执行和手动执行得到的密文,前者会被识别,后者能够通过。我前段时间折腾半天没办法最后写了个自动控制脚本模仿人类点击。因为我确实对js研究不深。仅提供一下我这边遇到的问题和思路。

@niuniuJQKKK
Copy link
Owner

@zhouyuchong 问题解决了吗?我这个是为了贴合公司业务写的。写的有点糙,还存有不少坑

@zhouyuchong
Copy link

@niuniuJQKKK 我当时也是帮朋友爬数据,当时用我前面的方法暂时拿到足够的数据就没有继续研究了。:grin:

@niuniuJQKKK
Copy link
Owner

@zhouyuchong 我这目前还没看到反馈相关问题,也没去管,就这样吧。能使起来就行

@MakiiYShi
Copy link

最新的js加密似乎能检测出是否人为操作。同样的加密函数,用js编译器自动执行和手动执行得到的密文,前者会被识别,后者能够通过。我前段时间折腾半天没办法最后写了个自动控制脚本模仿人类点击。因为我确实对js研究不深。仅提供一下我这边遇到的问题和思路。

@zhouyuchong 冒昧请问方便分享自动控制脚本的源码吗,现在做这个也遇到同样问题,谢谢🙏

@zhouyuchong
Copy link

@MakiiYShi 太久了代码找不到了,大概思路就是, windows有个库可以控制鼠标点击事件,用selenium打开后确定点击事件就行了

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants