You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python与requests/requests-html自动化处理JS加密值的页面请求

用Python + requests/requests-html实现无Selenium的加密值生成与页面跳转自动化

核心思路

要完成这个流程,关键是提取页面中生成加密值的JS逻辑,在Python环境中执行该逻辑得到加密值,再携带值请求目标页面,全程无需浏览器模拟。

步骤与实现代码

1. 安装依赖

先确保需要的库已安装:

pip install requests requests-html pyexecjs

注:pyexecjs需要依赖Node.js环境,请提前安装好Node.js。

2. 加载第一页并提取加密JS代码

用requests-html的会话加载第一页,找到包含加密逻辑的JS代码(可能是页面内的script标签,也可能是外部JS文件):

from requests_html import HTMLSession
import execjs

# 初始化会话,保持请求上下文
session = HTMLSession()

# 加载第一页
page_a_url = "https://your-domain.com/page-a"
page_a = session.get(page_a_url)

# 提取加密逻辑所在的JS代码
# 情况1:加密函数在页面内的script标签中
js_code = ""
for inline_script in page_a.html.xpath('//script[not(@src)]'):
    # 替换成你找到的加密函数名,比如generateEncryptedKey
    if 'generateEncryptedValue' in inline_script.text:
        js_code = inline_script.text
        break

# 情况2:加密函数在外部JS文件中
# js_src = page_a.html.xpath('//script[contains(@src, "encrypt")]/@src')[0]
# if not js_src.startswith('http'):
#     js_src = f"{page_a_url.rsplit('/', 1)[0]}/{js_src}"
# js_code = session.get(js_src).text

3. 执行JS生成加密值

用execjs编译并调用加密函数,生成目标值:

# 处理JS中的全局依赖(比如window对象),如果需要的话
js_code = "var window = {};\n" + js_code

# 编译JS并调用加密函数
ctx = execjs.compile(js_code)
encrypted_value = ctx.call('generateEncryptedValue')

4. 携带加密值请求第二页

用同一个会话发送请求,确保上下文一致:

page_b_url = "https://your-domain.com/page-b"
# 根据实际情况选择GET/POST,参数位置可能是URL参数、表单数据或请求头
response = session.get(page_b_url, params={'enc_key': encrypted_value})

# 验证请求结果
print(f"请求状态码: {response.status_code}")
print(f"页面内容预览: {response.text[:500]}")

常见问题处理

  • JS依赖缺失:如果加密函数依赖其他全局变量或辅助函数,需要把这些依赖代码也一起提取到js_code中,否则execjs执行会报错。
  • 异步加密函数:如果加密逻辑是异步的(比如用Promise),可以把异步逻辑封装成同步函数,或者用execjs的eval方法处理Promise的then回调。
  • 会话一致性:全程使用同一个HTMLSession实例,避免Cookie或其他请求头不一致导致的验证失败。

内容的提问来源于stack exchange,提问作者Lewis Lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 08:55:08