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

点击按钮交互后API抓取数据:同窗口执行request.get的疑问

解决Selenium会话中用requests获取动态加载数据的问题

你的核心问题在于:requests和Selenium是完全独立的HTTP会话——Selenium操作的浏览器保存了页面交互后的会话状态(比如Cookie、认证令牌),但requests默认会新建一个干净的会话,完全不知道浏览器里发生的操作,所以直接调用requests.get拿不到需要的数据。

下面是具体的解决方案,关键是把Selenium浏览器的会话状态(主要是Cookie)同步给requests,复用同一个会话上下文:

步骤说明

  1. 先完成所有Selenium的交互操作(打开页面、点击按钮触发对话框等)
  2. 从Selenium驱动中提取当前会话的Cookie,转换成requests能识别的格式
  3. 创建requests会话,导入Cookie并设置匹配的请求头
  4. 发送请求获取数据,最后再关闭Selenium驱动

修改后的完整代码

import requests
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By  # 补充你遗漏的By导入

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("start-maximized")
driver = webdriver.Chrome(options=chrome_options)
driver.get(url)

XPATH = "//*[name()='svg' and contains(@class, 'jss350')]"
XPATH2 = '/html/body/div[3]/div[3]/div/div[3]/button/span[1]'

# 等待SVG元素加载完成
WebDriverWait(driver, 20).until(EC.presence_of_all_elements_located((By.XPATH, XPATH)))
# 获取SVG元素列表并点击指定项
svg_elements = driver.find_elements(By.XPATH, XPATH)
for element in svg_elements[3:4]:
    element.click() # 打开对话框窗口

# 关闭对话框
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, XPATH2))).click()

# ------------------------ 核心修改部分 ------------------------
# 1. 从Selenium浏览器中提取当前会话的Cookie
selenium_cookies = driver.get_cookies()

# 2. 创建requests会话,同步浏览器Cookie
session = requests.Session()
for cookie in selenium_cookies:
    session.cookies.set(cookie['name'], cookie['value'])

# 3. 设置与浏览器一致的请求头(直接从浏览器获取更准确)
session.headers.update({
    'user-agent': driver.execute_script("return navigator.userAgent;"),
    'accept': 'application/json, text/plain, */*'  # 可根据目标接口要求调整
})

# 4. 发送请求获取数据
params = {
    'products': 'RU',
}
target_url = 'my url'  # 替换为你的目标接口URL
r = session.get(target_url, params=params)
json_data = r.json()
print(r.url)
print(r.text)
# ------------------------ 核心修改结束 ------------------------

# 最后关闭浏览器驱动
driver.quit()

额外注意事项

  • 不要提前调用driver.quit():这会关闭浏览器并销毁会话状态,导致Cookie失效
  • 如果目标接口依赖localStorage或sessionStorage中的令牌(比如access_token),可以用以下方式提取并添加到请求头:
    token = driver.execute_script("return localStorage.getItem('access_token');")
    session.headers.update({'Authorization': f'Bearer {token}'})
    
  • 部分网站会校验referer、origin等请求头,你可以从浏览器开发者工具中复制这些头信息,加到session的headers里,确保请求与浏览器发起的完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:20:40