如何用Python Selenium提取DevTools网络请求的Payload数据?
可行,以下是两种常用实现方案
方案一:使用Selenium 4+原生DevTools API(推荐)
Selenium 4及以上版本内置了Chrome DevTools Protocol(CDP)支持,可直接监听并提取网络请求的Payload,无需额外依赖。
步骤代码示例
from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import json from urllib.parse import parse_qs # 初始化Chrome浏览器(需对应版本的chromedriver) service = Service('chromedriver的本地路径') driver = webdriver.Chrome(service=service) driver.maximize_window() # 启用网络监听 driver.execute_cdp_cmd('Network.enable', {}) # 用于存储捕获到的登录Payload login_payload = None def capture_login_request(params): global login_payload request = params['request'] # 精准匹配login请求(根据实际请求URL调整过滤规则) if '/login' in request['url'] and request['method'] == 'POST': # 处理不同格式的Payload if 'postData' in request: try: # JSON格式Payload解析 login_payload = json.loads(request['postData']) except json.JSONDecodeError: # 表单编码格式Payload解析 login_payload = parse_qs(request['postData']) # 注册请求监听回调 driver.execute_cdp_cmd('Network.requestWillBeSent', {}, lambda params: capture_login_request(params)) # 执行登录流程 driver.get('https://app.opulabs.com/login') # 输入账号密码(元素定位需根据网站实际结构调整) email_input = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'email'))) password_input = driver.find_element(By.ID, 'password') email_input.send_keys('你的登录邮箱') password_input.send_keys('你的登录密码') # 点击「继续」按钮 continue_btn = driver.find_element(By.XPATH, '//button[contains(text(), "继续")]') continue_btn.click() # 等待Payload捕获完成 WebDriverWait(driver, 10).until(lambda d: login_payload is not None) # 输出提取到的凭证 print("捕获到的登录Payload:", login_payload) print("邮箱:", login_payload.get('email')) print("密码:", login_payload.get('password')) # 清理资源 driver.quit()
注意事项
- 确保chromedriver版本与本地Chrome浏览器版本一致
- 调整请求URL的过滤规则,避免误捕获其他请求
- 元素定位(ID、XPATH等)需对应目标网站的实际HTML结构
方案二:使用代理工具拦截请求(兼容旧版Selenium)
如果使用Selenium 3及以下版本,可通过代理工具(如mitmproxy)拦截所有网络请求,从中提取login请求的Payload。核心思路是将浏览器代理指向mitmproxy,在代理脚本中监听并解析指定请求。
核心逻辑
- 启动mitmproxy并编写脚本捕获POST请求
- 配置Selenium浏览器使用mitmproxy代理
- 执行登录流程后,从代理脚本中提取Payload
内容的提问来源于stack exchange,提问作者Wazzuper11
相关产品推荐
相关产品推荐

