影刀RPA 网络请求拦截:捕获Ajax数据的正确姿势
title: “影刀RPA 网络请求拦截捕获Ajax数据的正确姿势”date: 2026-07-01author: 林焱影刀RPA 网络请求拦截捕获Ajax数据的正确姿势很多网站的数据不直接写在HTML里而是页面加载完后通过Ajax异步请求获取。直接抓HTML拿不到数据用XPath也定位不到。这时候要拦截网络请求直接拿API返回的JSON比解析HTML干净100倍。什么情况用什么必须用请求拦截的场景页面数据通过异步Ajax加载HTML里只有骨架商品价格、库存、评论等数据是动态渲染的分页数据通过XHR请求获取URL不变只换参数想拿到完整未经截断的原始数据普通页面抓取就够的场景数据直接写在HTML里服务端渲染只需要静态文本内容拼多多店群自动化上架方案怎么做方法1监听网络响应最常用启动浏览器时开启网络监听捕获特定URL的响应数据。【影刀操作】新建流程「拦截Ajax数据」添加【Python】指令先要找到目标请求URL# 思路先用浏览器开发者工具F12→Network# 过滤XHR/Fetch类型的请求# 找到包含目标数据的那个请求URL# 记录下URL和请求参数print(请先用开发者工具分析目标网站的网络请求)添加【打开网页】指令URLhttps://目标网站.com开启请求监听是添加【Python】指令Playwright方式拦截importjson captured_data[]# 监听响应事件defhandle_response(response):# 只处理包含目标数据的接口ifapi/product/listinresponse.url:try:dataresponse.json()captured_data.append(data)print(f捕获到数据{len(data.get(data, {}).get(list, []))} 条)except:passpage.on(response,handle_response)# 触发页面操作让Ajax请求发出去page.goto(https://目标网站.com/products)page.wait_for_load_state(networkidle)# 取消监听page.remove_listener(response,handle_response)# 保存到变量yda.set_variable(raw_data,json.dumps(captured_data,ensure_asciiFalse))print(f共捕获{len(captured_data)}次响应)方法2直接重放API请求分析到目标接口后不通过浏览器直接用Python发HTTP请求效率更高。【影刀操作】添加【Python】指令importrequestsimportjson# 从浏览器开发者工具里复制的请求头右键请求→Copy as cURL→转换成Pythonheaders{User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36,Referer:https://目标网站.com/products,Cookie:your_session_cookie_here,X-Requested-With:XMLHttpRequest}all_data[]page_num1whileTrue:params{page:page_num,pageSize:20,category:electronics}resprequests.get(https://目标网站.com/api/product/list,headersheaders,paramsparams,timeout10)resultresp.json()itemsresult.get(data,{}).get(list,[])ifnotitems:breakall_data.extend(items)print(f第{page_num}页获取{len(items)}条累计{len(all_data)}条)page_num1# 判断是否还有下一页total_pagesresult.get(data,{}).get(totalPages,1)ifpage_numtotal_pages:breakyda.set_variable(product_list,json.dumps(all_data,ensure_asciiFalse))print(f采集完成共{len(all_data)}条数据)方法3拦截并修改请求高级用法不只是监听还能修改请求参数或响应内容。【影刀操作】# 拦截请求并修改参数defhandle_route(route):requestroute.requestifapi/searchinrequest.url:# 修改请求去掉某个限制参数new_headersdict(request.headers)new_headers[X-Page-Size]100# 强制每页100条route.continue_(headersnew_headers)else:route.continue_()page.route(**/*,handle_route)page.goto(https://目标网站.com/search?keywordtest)有什么坑坑1接口有签名校验很多电商网站的接口带有sign参数是时间戳密钥的MD5直接重放会报签名错误。分析思路TEMU店群如何管理运营在Network里找到请求看sign参数的规律搜索页面JS源码里sign的生成逻辑全局搜索sign 用Python复现签名逻辑坑2接口需要登录态才能访问没带登录Cookie接口返回401或者空数据。解决方法参考Cookie管理那篇先登录获取Cookie在请求头里带上Cookie。坑3数据量太大响应超时一次性请求几千条服务器超时或者返回错误。解决方法分页请求每页不超过50条在请求间加0.5-1秒随机延时。坑4动态加密的接口参数有些接口的参数经过加密Base64或者AES加密直接看不出规律。解决方法这类接口用Selenium/Playwright直接操作浏览器更省事别死磕接口逆向。总结网络请求拦截能拿到比HTML解析干净得多的结构化数据。核心流程开发者工具分析接口 → 找到目标请求URL和参数 → 用Python直接重放 → 处理分页和异常。掌握这个技能80%的动态网站数据采集问题都能解决。