如何获取网页Network栏下LstIscritti接口的目标JSON数据?
抓取目标接口的JSON数据方案
方法1:直接调用API(推荐,更高效)
无需依赖Selenium,直接用requests库模拟浏览器请求,跳过页面渲染环节,直接获取接口的完整JSON数据:
import requests import time # 初始化会话,维持网站所需的会话Cookie session = requests.Session() # 先访问主页面,获取必要的会话标识 main_url = "https://commercialisti.it/iscritti" session.get(main_url) # 构造API请求参数 cap_code = "37138" timestamp = int(time.time() * 1000) # 生成当前毫秒级时间戳,匹配接口参数格式 api_url = f"https://commercialisti.it/iscritti/LstIscritti?_={timestamp}" # 模拟浏览器请求头,参考开发者工具中该接口的Headers信息 headers = { "Accept": "application/json, text/javascript, */*; q=0.01", "X-Requested-With": "XMLHttpRequest", "Referer": "https://commercialisti.it/iscritti/", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36" } # 携带Cap参数发送GET请求 params = {"Cap": cap_code} response = session.get(api_url, headers=headers, params=params) # 解析并处理JSON数据 if response.status_code == 200: full_data = response.json() print(full_data) # 可选:将数据保存到本地文件 # import json # with open("commercialisti_data.json", "w", encoding="utf-8") as f: # json.dump(full_data, f, ensure_ascii=False, indent=2) else: print(f"请求失败,状态码:{response.status_code}")
注意:请求头中的User-Agent建议替换为你当前浏览器的真实标识,可从开发者工具的请求头中复制。
方法2:用Selenium监听网络请求
如果需要保留Selenium的操作流程,可以通过Chrome DevTools协议(CDP)捕获目标接口的响应:
from selenium import webdriver from selenium.webdriver.common.by import By import time import json # 初始化Chrome浏览器并启用网络监听 driver = webdriver.Chrome() driver.maximize_window() driver.execute_cdp_cmd("Network.enable", {}) # 定义捕获目标接口的回调函数 def capture_api_response(event): request_id = event["requestId"] response_url = event["response"]["url"] if "LstIscritti" in response_url: # 获取接口响应体 response_body = driver.execute_cdp_cmd("Network.getResponseBody", {"requestId": request_id}) full_data = json.loads(response_body["body"]) print("获取到完整接口数据:") print(full_data) # 监听响应完成事件 driver.execute_cdp_cmd("Network.responseReceived", {}, capture_api_response) # 原有页面操作流程 driver.get('https://commercialisti.it/iscritti') driver.implicitly_wait(10) driver.switch_to.frame(driver.find_element(By.XPATH, "(//iframe)[1]")) casella_testo = driver.find_element("id", "Cap") casella_testo.send_keys("37138") pulsante_cerca = driver.find_element("id", 'btnContinua') pulsante_cerca.click() time.sleep(5) # 等待请求完成 driver.quit()
说明:该方法通过Selenium调用Chrome的调试接口,实时监听网络请求,当目标接口返回响应时自动捕获并解析数据,需确保Selenium与Chrome版本兼容。
内容的提问来源于stack exchange,提问作者Federicofkt
相关产品推荐
相关产品推荐

