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

使用UI自动化时能否获取端点响应?寻求替代karate.Intercept()提取Blob URL PDF文本方案

UI自动化中获取端点响应及Blob PDF文本提取方案

一、UI自动化中能否获取端点响应?

可以。主流UI自动化工具都支持通过浏览器DevTools API监听、拦截网络请求,直接获取请求的响应内容,包括状态码、响应头、响应体等。

以常用工具为例:

  • Playwright:通过page.on('response')事件监听所有响应,或用route API精准拦截特定请求,直接提取响应体。
  • Selenium:借助Chrome DevTools Protocol(CDP),通过driver.execute_cdp_cmd()调用Network相关方法,拦截并获取目标请求的响应数据。

二、类似karate.Intercept()的响应获取及Blob URL PDF文本提取替代方案

核心思路

无需重定向,只需拦截PDF的原始请求、获取完整的二进制响应数据——因为Blob URL对应的PDF本质是服务器返回的二进制数据在浏览器本地的映射,拦截原始请求就能拿到PDF的完整数据,跳过Blob URL的处理环节,直接解析文本。

具体实现示例

1. Playwright(JavaScript)

拦截PDF请求,获取响应二进制数据后用pdf-parse提取文本:

const { chromium } = require('playwright');
const pdfParse = require('pdf-parse');

(async () => {
  const browser = await chromium.launch();
  const page = await browser.newPage();

  // 拦截目标PDF请求
  await page.route('**/*.pdf', async (route) => {
    // 继续请求不重定向,获取原始响应
    const response = await route.fetch();
    // 读取二进制响应体
    const pdfBuffer = await response.body();
    // 解析PDF提取文本
    const data = await pdfParse(pdfBuffer);
    console.log('PDF文本内容:', data.text);
    // 让页面正常加载Blob URL
    await route.continue();
  });

  await page.goto('你的目标页面URL');
  await browser.close();
})();

2. Selenium(Python)

通过CDP拦截请求,获取PDF字节流后用PyPDF2提取文本:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from PyPDF2 import PdfReader
import io
import base64

options = Options()
options.add_experimental_option("excludeSwitches", ["enable-logging"])
driver = webdriver.Chrome(options=options)

# 启用网络监控
driver.execute_cdp_cmd('Network.enable', {})

# 设置请求拦截规则,仅拦截PDF
driver.execute_cdp_cmd('Network.setRequestInterception', {
    'patterns': [{'urlPattern': '**/*.pdf', 'interceptionStage': 'HeadersReceived'}]
})

def handle_interception(request):
    # 放行请求并获取响应
    driver.execute_cdp_cmd('Network.continueInterceptedRequest', {'interceptionId': request['interceptionId']})
    # 获取响应体
    response = driver.execute_cdp_cmd('Network.getResponseBody', {'requestId': request['requestId']})
    # 处理二进制数据
    if response['base64Encoded']:
        pdf_bytes = io.BytesIO(base64.b64decode(response['body']))
    else:
        pdf_bytes = io.BytesIO(response['body'])
    # 解析PDF文本
    reader = PdfReader(pdf_bytes)
    text = '\n'.join([page.extract_text() for page in reader.pages])
    print('PDF文本内容:', text)

# 绑定拦截事件处理函数
driver.add_cdp_listener('Network.requestIntercepted', handle_interception)

driver.get('你的目标页面URL')
driver.quit()

关键注意点

  • 必须拦截服务器返回PDF的原始请求,而非Blob URL的本地请求(Blob URL是浏览器内部地址,无法获取实际数据)。
  • 不同工具返回的响应体可能是base64编码或原始二进制,需根据实际格式做对应转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 19:01:17