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

如何用Python+Chrome+Selenium不落地文件直接获取PDF内容

无需下载直接获取PDF内容的两种方案

方案一:直接用requests获取(URL可直接访问时优先用)

如果PDF的URL可以直接访问(不需要通过Selenium处理登录、页面渲染等前置操作),直接用requests库是最简便高效的,和你提到的用法一致:

import requests

pdf_url = "http://www.africau.edu/images/default/sample.pdf"
pdf_content = requests.get(pdf_url).content  # 获取二进制形式的PDF内容

# 后续可直接处理内容,比如保存到内存或解析
# 示例:保存到文件(可选)
with open("sample.pdf", "wb") as f:
    f.write(pdf_content)

方案二:用Selenium+Chrome DevTools协议(CDP)拦截网络请求

如果必须通过Selenium完成前置操作(比如登录、页面动态生成PDF链接),可以利用Chrome的DevTools协议拦截PDF的网络请求,直接获取响应内容,无需下载到本地:

from selenium import webdriver

options = webdriver.ChromeOptions()
# 不需要下载相关配置,让Chrome在浏览器内打开PDF
options.add_argument("--headless")  # 无头模式可选

driver = webdriver.Chrome(options=options)

# 启用Chrome DevTools的网络监控
driver.execute_cdp_cmd("Network.enable", {})

# 定义回调函数,监听响应完成事件
response_body = None
def handle_response(event):
    global response_body
    # 判断请求的URL是否是目标PDF
    if event["response"]["url"] == "http://www.africau.edu/images/default/sample.pdf":
        # 获取响应体
        body = driver.execute_cdp_cmd("Network.getResponseBody", {"requestId": event["requestId"]})
        # 处理二进制内容:如果base64编码则解码
        if body.get("base64Encoded", False):
            import base64
            response_body = base64.b64decode(body["body"])
        else:
            response_body = body["body"].encode("utf-8")

# 添加事件监听
driver.execute_cdp_cmd("Network.responseReceived", {"listener": handle_response})

# 访问PDF URL
driver.get("http://www.africau.edu/images/default/sample.pdf")

# 现在response_body就是PDF的二进制内容,和requests.get的content一致
print("获取到PDF内容长度:", len(response_body))

# 后续处理示例:解析或保存
# with open("sample_from_cdp.pdf", "wb") as f:
#     f.write(response_body)

driver.quit()

注意事项

  • 如果PDF链接是页面动态生成的,需要先完成页面交互(比如点击按钮生成PDF),再拦截对应的请求;
  • 确保Chrome版本和Selenium版本兼容,避免CDP命令不支持的问题;
  • 若遇到跨域或权限问题,可临时添加--disable-web-security选项(仅用于测试环境)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 18:06:27