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

如何通过Python requests.get调用JavaScript函数实现PDF下载

结论

仅使用requests库无法实现你预期的需求。

报错原因

你遇到的requests.exceptions.InvalidSchema异常根源是两点:

  • requests是纯HTTP客户端库,仅支持处理http://、https://、ftp://这类标准网络协议的请求,javascript:属于浏览器端的伪协议,专门用于触发浏览器执行JS代码,不在requests的支持范围内,所以直接抛出“找不到对应连接适配器”的错误。
  • requests没有内置JavaScript运行环境,只能获取网页的静态文本内容,无法解析、执行页面内嵌的JS函数,你预期的调用submitForm("pdf")的操作用requests根本无法完成。

可行解决方案

方案1:抓包模拟请求(优先推荐)

打开浏览器F12开发者工具的「网络」面板,手动点击页面上触发submitForm("pdf")的按钮,观察浏览器实际发出的HTTP请求详情:

  • 确认请求的目标URL、请求方法(GET/POST)
  • 确认请求携带的参数、请求头、Cookie信息
    拿到以上信息后,直接用requests模拟这个真实的HTTP请求,就能直接获取到PDF的二进制内容,你原有的保存文件逻辑不需要改动。

方案2:使用带JS执行能力的自动化工具

如果页面请求加密逻辑复杂,抓包模拟成本高,可以使用Selenium、Playwright这类浏览器自动化工具,这类工具会启动真实的浏览器内核,支持加载完整页面、执行页面内置JS函数,可以直接调用submitForm("pdf")后拦截返回的PDF内容完成下载。

# 方案1的简化示例逻辑(替换为你抓包得到的真实参数即可)
import requests
import shutil
import os

main_dir = os.path.dirname(__file__)
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.67 Safari/537.36'}

with requests.Session() as s:
    # 先请求原页面保持会话状态
    page_resp = s.get(url, verify=False, headers=headers)
    if page_resp.status_code == 200:
        # 替换为你抓包得到的PDF请求地址、请求参数
        pdf_resp = s.post(
            "https://example.com/gen_pdf", 
            data={"type": "pdf"},
            verify=False,
            stream=True,
            headers=headers
        )
        if pdf_resp.status_code == 200:
            with open(os.path.join(main_dir, 'nfe.pdf'), 'wb') as f:
                shutil.copyfileobj(pdf_resp.raw, f)

内容的提问来源于stack exchange,提问作者Julio S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 15:06:04