影刀RPA 文件上传与下载的自动化处理

📅 2026/7/18 4:13:09
影刀RPA 文件上传与下载的自动化处理
影刀RPA 文件上传与下载的自动化处理作者林焱文件上传和下载看着简单——不就是点个按钮选个文件、或者点个链接保存个文件吗但真到了自动化里这俩操作坑多到你怀疑人生。上传按钮点击后弹出来的是系统文件选择框影刀的元素定位根本够不着下载文件时不知道下载到哪了、不知道下载完了没、文件名还是随机的。这篇文章把文件上传和下载的自动化方案讲透从最简单的到最稳的按场景给你匹配。一、文件上传1.1 方案一直接填写文件路径推荐大部分网页的文件上传按钮底层都是一个隐藏的input typefile元素。你可以跳过点击按钮和操作系统文件选择框直接给这个input元素填写文件路径。【填写输入框】 目标元素定位到 input typefile 填写内容D:\upload\test.pdf怎么定位到隐藏的input元素F12开发者工具里搜索typefile找到那个input元素。它通常是display:none或visibility:hidden隐藏的但影刀仍然可以定位到它。在影刀的元素选择器里用XPath定位//input[typefile]这个方案的优势不需要处理系统文件选择框不依赖窗口焦点速度快一步到位最稳定坑1页面有多个file input一个页面有多个上传入口每个都有一个input typefile。用//input[typefile]定位到的是第一个。需要加上父容器来区分//div[classavatar-upload]//input[typefile] //div[classdocument-upload]//input[typefile]坑2input是动态创建的有些网站点击上传按钮后才动态创建input typefile。你需要先点击上传按钮等input出现后再填写1. 【点击】点击上传按钮 2. 【等待元素】等待 input[typefile] 出现 3. 【填写输入框】填写文件路径 4. [video(video-k0YykF5T-1784310998992)(type-csdn)(url-https://live.csdn.net/v/embed/525010)(image-https://v-blog.csdnimg.cn/asset/f4faa587144cb7070f19e8b36813806b/cover/Cover0.jpg)(title-店群矩阵自动化突破运营极限)]1.2 方案二模拟系统文件选择框如果方案一行不通比如input被加密了、或者上传组件是Flash/ActiveX就只能走系统文件选择框这条路。1. 【点击】点击网页上的上传按钮 2. 【等待窗口】等待文件选择对话框出现 3. 【填写输入框】在文件名输入框中填写文件路径 目标元素定位到文件选择框的输入框 4. 【模拟按键】按Enter / 【点击】点击打开按钮文件选择框是系统级窗口不是网页元素需要用影刀的窗口操作类指令来定位。坑1文件选择框的元素定位不稳定不同Windows版本的文件选择框结构不同元素属性也可能不同。在一台电脑上能定位到换一台可能不行。坑2填写路径太快没生效系统文件选择框的输入框有时候需要等一下才能接收输入。填写前加一个小延时。坑3路径中的反斜杠Windows路径用反斜杠D:\upload\test.pdf在某些场景下反斜杠是转义字符。如果填写后路径不对试试用正斜杠D:/upload/test.pdf。1.3 方案三多文件上传如果上传组件支持多文件选择方法一一个input填多个路径用换行分隔 【填写输入框】 目标元素input[typefile][multiple] 填写内容D:\file1.pdf\nD:\file2.pdf\nD:\file3.pdf 方法二循环逐个上传 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/a4ec70d70d6747cfb15002644c16c1c2.png#pic_center) 遍历文件列表 【填写输入框】填写当前文件路径 【等待元素】等待上传完成提示 【点击】如果有继续添加按钮点击它坑多文件路径分隔符有些浏览器接受\n作为多文件路径分隔符有些不接受。如果不支持就只能逐个上传。1.4 上传完成判断上传文件后怎么知道上传完了1. 【填写输入框】填写文件路径 2. 【等待元素】等待上传进度条消失 / 等待文件预览图出现 / 等待上传成功提示 3. 如果等待超时 → 【日志输出】上传可能未完成不同网站的上传完成标志不同常见的有文件预览图/缩略图出现上传成功文字提示进度条消失文件名显示在上传区域二、文件下载2.1 方案一配置下载目录推荐在【打开网页】时设置浏览器的下载目录这样所有下载的文件都会到指定目录你不需要管保存对话框。【打开网页】 url https://example.com 浏览器类型 内置浏览器 下载路径 D:\downloads然后直接点击下载链接1. 【点击】点击下载按钮/链接 2. 【等待文件】等待文件出现在下载目录 文件路径 D:\downloads\ 超时 60秒 3. 【日志输出】下载完成坑1文件名不确定下载的文件名可能是时间戳、可能是随机字符串、可能是中文。你不知道确切文件名就没法用【等待文件】精确等待。解决方法下载前记录下载目录的文件列表下载后再对比新增的文件就是刚下载的。importosimporttime download_dirD:\\downloads# 下载前记录已有文件beforeset(os.listdir(download_dir))# 这里触发下载在影刀流程中用点击指令# 等待新文件出现for_inrange(60):time.sleep(1)afterset(os.listdir(download_dir))new_filesafter-beforeifnew_files:breakifnew_files:filepathos.path.join(download_dir,new_files.pop())set_variable(downloaded_file,filepath)else:set_variable(downloaded_file,)坑2下载还在进行中文件不完整文件出现在目录里不代表下载完了可能是还在写入的临时文件.crdownload后缀。需要等临时文件变成正式文件名importosimporttime download_dirD:\\downloads# 等所有 .crdownload 临时文件消失for_inrange(120):time.sleep(1)filesos.listdir(download_dir)ifnotany(f.endswith(.crdownload)orf.endswith(.tmp)forfinfiles):break2.2 方案二直接用URL下载如果下载链接是固定的URL比如https://example.com/files/report.pdf不需要走浏览器直接用Python下载importrequests urlhttps://example.com/files/report.pdfsave_pathD:\\downloads\\report.pdf# 如果需要登录态带上Cookiecookiesget_variable(browser_cookies)headers{User-Agent:Mozilla/5.0 ...}responserequests.get(url,headersheaders,cookiescookies,streamTrue)ifresponse.status_code200:withopen(save_path,wb)asf:forchunkinresponse.iter_content(chunk_size8192):f.write(chunk)set_variable(download_status,success)else:set_variable(download_status,ffailed:{response.status_code})这个方案最快最稳定但前提是你能拿到下载URL。有些下载URL是动态生成的、带token的、有时效性的需要先从页面里提取出来。2.3 方案三处理保存对话框如果浏览器没配下载目录点击下载后会弹出另存为对话框。这是系统级窗口处理方式类似文件上传的方案二1. 【点击】点击下载链接 2. 【等待窗口】等待另存为对话框出现 3. 【填写输入框】在文件名输入框填写保存路径 4. 【点击】点击保存按钮 5. ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/7022ab4448684cfe8708decaa2067507.png#pic_center) 6. 【等待窗口】等待对话框关闭这个方案最不推荐因为系统对话框的定位最不稳定。2.4 下载大文件的处理下载大文件几百MB以上时等待时间可能很长。需要temu店群自动化报活动案例设置足够的超时时间监控文件大小变化判断下载是否在进行下载完成后验证文件大小是否合理importosimporttime filepathD:\\downloads\\big_file.ziplast_size0stable_count0# 监控文件大小变化连续10秒不变则认为下载完成whileTrue:ifos.path.exists(filepath):current_sizeos.path.getsize(filepath)ifcurrent_sizelast_sizeandcurrent_size0:stable_count1ifstable_count10:breakelse:stable_count0last_sizecurrent_size time.sleep(1)set_variable(download_complete,True)set_variable(file_size,last_size)三、常见场景速查3.1 批量上传文件1. 【获取文件列表】获取指定目录下所有文件 2. 遍历文件列表 a. 【打开网页】打开上传页面 b. 【填写输入框】input[typefile] 填写文件路径 c. 【等待元素】等待上传成功 d. 如果需要 → 【点击】点击提交按钮 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/3965e0386a5c4f9691d2875a1001ed98.png#pic_center) e. 【等待元素】等待提交成功 f. 【日志输出】文件{i}上传成功 3. 输出上传结果汇总3.2 批量下载文件1. 【打开网页】打开文件列表页面 2. 【获取元素列表】获取所有下载链接 3. 遍历链接列表 a. 【获取元素属性】获取链接的href b. Python节点用requests下载文件 c. 【日志输出】文件{i}下载成功 d. 【随机延时】1-3秒避免触发频率限制 4. 输出下载结果汇总3.3 下载需要登录的文件1. 【打开网页】打开网站并登录 2. 【获取Cookie】获取当前浏览器的Cookie 3. Python节点用requests带上Cookie下载文件四、避坑清单坑1上传后页面没反应填写文件路径后页面没有触发上传可能是因为input的change事件没被触发。用【执行JavaScript】手动触发varinputdocument.querySelector(input[typefile]);vareventnewEvent(change,{bubbles:true});input.dispatchEvent(event);坑2下载的文件打不开文件大小是0KB或者打不开说明下载不完整。检查网络是否中断、是否提前关闭了浏览器。坑3上传文件太大被限制网站有文件大小限制超过限制上传失败但没有明确提示。上传前先检查文件大小超限的跳过或压缩。坑4下载路径有中文乱码下载路径包含中文文件保存时路径乱码。尽量用纯英文路径作为下载目录。坑5并发下载触发限制短时间内下载太多文件被网站封IP。加随机延时控制并发数量。