原理

本方案是通过pyppeteer拦截并修改替换某乎生成x-zse-96、x-zst-81的主要js文件,达到无需扣js代码就能调用加密方法或参数的效果,这里只写了个demo,其他功能自己拓展

import os
import random
import asyncio
import logging
import requests
from pyppeteer import launch
try:import nest_asyncio
except:os.system('pip install nest_asyncio')import nest_asyncio
nest_asyncio.apply()
pyppeteer_level = logging.WARNING
logging.getLogger('pyppeteer').setLevel(pyppeteer_level)
logging.getLogger('websockets.protocol').setLevel(pyppeteer_level)
pyppeteer_logger = logging.getLogger('pyppeteer')
pyppeteer_logger.setLevel(logging.WARNING)class AtomExecutor(object):name = '知乎'base_url = 'https://www.zhihu.com/'def init(self):self.loop = asyncio.get_event_loop()self.browser = ''self.x96_js = 'D=window.zhimuhuan_x96=function(e){return __g._encrypt(encodeURIComponent(e))};exports.ENCRYPT_VERSION=A'self.x81_js = '{"x-zst-81":window.zhimuhuan_x81=f.xZst81})'def process_item(self, keyword):self.init()self.oppen_pyppeteer()self.loop.run_until_complete(self.go_to(keyword))async def go_to(self,keyword):url = "https://www.zhihu.com/search?type=content&q={}".format(keyword)try:await self.page.goto(url, options={'timeout': 1000 * 20})except:passawait asyncio.sleep(5)dimensions = await self.page.evaluate(f'varq=document.documentElement.scrollTop={555500}')check_96 = await self.page.evaluate("window.zhimuhuan_x96('{}')".format('460858518271c07cca7e6d7b9620ef8e'))check_81 = await self.page.evaluate('window.zhimuhuan_x81')return Trueasync def intercept_network_request(self, request):if 'static.zhihu.com/heifetz/main.app'  in request.url and '.js' in request.url:response = requests.request("GET", request.url, headers=request.headers, timeout=20)html  = response.textx96_code = 'D=function(e){return __g._encrypt(encodeURIComponent(e))};exports.ENCRYPT_VERSION=A'x81_code = '{"x-zst-81":f.xZst81})'app_js = html.replace(x96_code, self.x96_js).replace(x81_code,self.x81_js)resp = {"body": app_js, "headers": response.headers, "status": response.status_code}await request.respond(resp)elif request.resourceType in ['image', 'media', 'eventsource', 'websocket']:await request.abort()else:await request.continue_()def oppen_pyppeteer(self):try:asyncio.get_event_loop().run_until_complete(self.browser.close())except:passasyncio.get_event_loop().run_until_complete(self.PyppeteerMain())self.loop.run_until_complete(self.page.setRequestInterception(True))self.page.on('request', lambda request: asyncio.create_task(self.intercept_network_request(request)))async def PyppeteerMain(self):self.browser = await launch({'headless': True,'userDataDir': 'pyppeteer_data_for_cjt' ,'args': ['--no-sandbox','--start-maximized','--disable-gpu','--disable-blink-features=AutomationControlled','--user-agent={}'.format(self.get_ua()),],'dumpio': True})self.page = await self.browser.newPage()await self.page.setUserAgent(self.get_ua())await self.page.setViewport({"width": 1920,"height": 1080})@staticmethoddef get_ua():user_agent_list = ["Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0",'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36",]return random.choice(user_agent_list)if __name__ == "__main__":function = AtomExecutor()function.process_item('手机')

某乎x-zse-96、x-zst-81最新通杀方案相关推荐

  1. 阿里达摩院再造AI抗疫技术:20秒判读CT影像,识别准确率达96%

    2020-02-16 13:22:25 允中 发自 凹非寺  量子位 报道 | 公众号 QbitAI 又是达摩院. 阿里方面最新消息,达摩院联合阿里云针对新冠肺炎临床诊断研发了一套全新AI诊断技术: ...

  2. 阿里达摩院再造AI抗疫技术:20秒判读CT影像,识别准确率达96%,河南率先启用...

    允中 发自 凹非寺  量子位 报道 | 公众号 QbitAI 又是达摩院. 阿里方面最新消息,达摩院联合阿里云针对新冠肺炎临床诊断研发了一套全新AI诊断技术: AI可以在20秒内准确地对新冠疑似案例C ...

  3. 后端如何发出请求_gRPC系列(三) 如何借助HTTP2实现传输

    本系列分为四大部分: gRPC系列(一) 什么是RPC? gRPC系列(二) 如何用Protobuf组织内容 gRPC系列(三) 如何借助HTTP2实现传输 gRPC系列(四) 框架如何赋能分布式系统 ...

  4. mysql切换到使用openssl_OpenSSL可以用来调试到MySQL服务器的SSL连接吗?

    OpenSSL 1.1.1版(2018年9月11日发布)在 commit a2d9cfbac5d87b03496d62079aef01c601193b58中添加了对-starttls mysql的支持 ...

  5. python科学计数法转换_对比Python学习Go 基本数据结构

    公众号文章不方便更新,可关注底部「阅读原文」博客,文章随时更新. 本篇是「对比 Python 学习 Go」[1] 系列的第三篇,本篇文章我们来看下 Go 的基本数据结构.Go 的环境搭建,可参考之前的 ...

  6. 大数据-平台-解决方案-基础架构一览

    1.talkingdata  (数据平台) 2.明略数据(解决方案) 3.百融金服(金融大数据) 4.国双科技(营销大数据) 5.国信优易(媒体大数据) 6.百分点(营销大数据) 7.华院集团(解决方 ...

  7. 数据库设计性能与效率

    摘自Discuz官网:http://dev.discuz.org/wiki/index.php?title=%E7%BC%96%E7%A0%81%E8%A7%84%E8%8C%83#.E6.80.A7 ...

  8. Http Chunked Transfer Coding

    分块传输编码 Chunked Transfer Coding 是超文本传输协议(HTTP)中的一种数据传输机制,允许HTTP由網頁伺服器发送给客户端应用( 通常是网页浏览器)的数据可以分成多个部分.分 ...

  9. 线程及同步的性能 – 线程池/ ThreadPoolExecutors/ ForkJoinPool

    线程池和ThreadPoolExecutors 虽然在程序中可以直接使用Thread类型来进行线程操作,但是更多的情况是使用线程池,尤其是在Java EE应用服务器中,一般会使用若干个线程池来处理来自 ...

  10. 多种方式测量AMP328频率响应

    测量电路系统,比如放大器的频率特性(包括幅频特性和相频特性)是电路测量中重要的内容.电路的频率特性的测量方法可以有以下几种形式: 扫频方法 注入白噪声方法 测量系统的单位冲激响应 本文下面利用实验室中 ...

最新文章

  1. SAP有用的知识(持续更新)
  2. 【Unity】publishing setting keystore作用
  3. 以云原生的名义,举办一次技术聚会
  4. 亲测:阿里云的高效云盘真没有声称那么好
  5. spring cloud常用组件介绍
  6. 【Linux系统编程】IO标准缓冲区
  7. 堆(Heap)大根堆、小根堆
  8. url的特殊字符编码 encodeURI编码
  9. XP添加权限时提示:无法显示用户选项对话框的解决方法!
  10. WebBrowser控件 打印2
  11. HDU 漫步校园 (记忆化搜索)
  12. 查询同一张表符合条件的某些数据的id拼接成一个字段返回
  13. linux jsp mysql_Linux JSP连接MySQL数据库
  14. MFC 单文档、多文档和对话框
  15. 数学作图工具_分别用于教学、排版、科研的数学作图软件
  16. matlab 改变图片比例尺,ps修改图片尺寸和比例尺方法图解
  17. win7计算机的用户名和密码,win7文件共享访问需要输入用户名和密码如何解决
  18. Vokenization:一种比GPT-3更有常识的视觉语言模型
  19. 云盼智能快递柜提供第三方便民服务平台,解决快递业终端服务困境
  20. python白_Python小白到底有多白?

热门文章

  1. 东南大学计算机考研面试题,东南大学复试常问问题今天的模拟面试总结
  2. Vue中使用swiper构建简易轮播图
  3. 小鸡啄米之React事件处理
  4. win怎么更换计算机密码错误,win10系统更改开机密码提示“Windows不能更改密码”的解决方法...
  5. 3D点云目标检测算法综述
  6. Blazor Day in China来喽,还不来赶紧报名参与
  7. 看一看golang的官方包:strings
  8. 网站调用服务器字体,网站调用字体库
  9. 面试官:请你讲讲Thread.sleep(0) 的作用?
  10. Git 命令行其实真的很好用