影刀RPA新手教程:学生党入门完全指南——课表导入、图书馆抢座与学术资源自动采集
影刀RPA新手教程学生党入门完全指南——课表导入、图书馆抢座与学术资源自动采集我大三那年图书馆座位要靠抢。每天晚上12点系统开放第二天预约手动点根本抢不到。室友让我帮他写一个自动抢座的脚本我研究了两天影刀RPA真的抢到了。那一刻我发现RPA不是程序员的专利学生也能用而且用好了能解决很多实际问题。这篇文章围绕图书馆抢座课表管理学术资源采集三个真实场景展开全部是我自己用过的功能。你跟着做完能直接用到你自己的学习和生活里。一、安装与准备学生党零成本上手影刀RPA社区版完全免费学生用足够了。去官网下载Windows版安装过程和装QQ没什么区别。我第一次装的时候卡在浏览器插件这一步。Chrome要在扩展程序里开启开发者模式然后才能安装影刀的插件。这个步骤官方文档写得不清楚我折腾了半小时。装完之后打开影刀你会看到新建流程的按钮。流程就是你的自动化程序一个流程解决一个具体问题。界面分三块左边是指令库中间是流程画布你拖指令进来拼流程的地方右边是属性面板选中某个指令后在这里填参数。学生党建议先把界面熟悉15分钟把每个大类指令都点开看看。这比直接开始做项目效率高得多因为你知道有哪些指令可用做的时候不用现查。二、元素定位四合一搞定学校系统的关键学校的内网系统大多又老又难用。元素定位是你必须掌握的核心技能。四合一元素捕获、XPath、CSS选择器、正则表达式四种方法配合用。元素捕获最简单点一下目标位置就行。但学校系统经常用动态id每次刷新id都变这时候元素捕获就失效了。XPath按文字定位是学校系统最好用的方式//button[text()预约座位] ← 按按钮文字定位学校系统通用 //a[contains(text(),图书馆)] ← 包含图书馆三个字的链接 //input[placeholder请输入学号] ← 按placeholder定位输入框 //div[classseat-item] ← 按class定位座位元素 //table[idschedule]//tr ← 定位课表的所有行CSS选择器比XPath快语法也更简洁button:contains(预约)← 包含预约文字的按钮影刀支持 .seat-item:nth-child(3)← 第3个座位 input[placeholder*学号] ← placeholder包含学号的输入框 正则表达式用在什么场景学校系统的页面源码经常是一团乱码价格哦不对座位号藏在里面用正则提取最方便座位号[:]\s*(\d) ← 提取座位号 图书馆.*?(\d{4}-\d{2}-\d{2}) ← 提取日期我当时抢图书馆座位发现座位按钮的id是动态生成的seat_12345这样的格式XPath用//div[contains(id,seat_)]就匹配到了所有座位。三、变量与数据类型让RPA记住你的学号课表变量就是让流程记住一些信息。你的学号、密码、喜欢的座位号都要存在变量里。数字类型用来存座位号、课程节次这些。字符串用来存学号、密码、课程名称。# 学号和密码存在字符串变量里student_id2021012345passwordyour_password[video(video-vJZVOqYC-1783321038748)(type-csdn)(url-https://live.csdn.net/v/embed/525000)(image-https://v-blog.csdnimg.cn/asset/23da3fe1f67a47106d725406cfde9a97/cover/Cover0.jpg)(title-拼多多店群自动化上架方案)]列表用来存一周的课程安排或者一批要预约的日期# 周一的课程列表monday_schedule[高等数学,大学英语,程序设计]字典用来存课程表和教室的对应关系这个我在做课表导入的时候用得非常多# 课程-教室映射course_room{高等数学:教一楼201,大学英语:教三楼105,程序设计:机房A}JSON处理在对接学校API的时候会用到。有些学校的系统有开放接口返回的是JSON格式要先转成JSON对象才能提取字段。我当时踩过的坑变量名用中文还是英文我的建议是统一用英文或者统一用中文拼音不要混着来。我见过有人用var1、var2这种命名一周后再看自己都看不懂了。四、流程控制让抢座流程会思考流程控制就是让机器人会判断、会重复。抢图书馆座位的逻辑是“如果座位可用就点预约不可用时就等一会儿再刷新看看”。If条件判断的基本用法# 抢座逻辑seat_availableTrueifseat_available:print(点击预约)else:print(等待刷新)循环有四种各种场景都要会For次数循环你知道要循环几次的场景。比如预约一周的座位循环7次。ForEach列表循环你有一批数据要逐个处理。比如课表里有5门课逐个添加到日历里。While条件循环不知道要循环多少次。比如刷新页面直到座位变为可预约状态就用While循环。相似元素循环页面上有一排座位按钮用相似元素循环逐个检查每个座位的状态。# While循环实现等座位释放whileseat_taken:time.sleep(30)# 等30秒refresh_page()# 刷新页面seat_takencheck_seat_status()# 重新检查Try-Catch我建议在所有关键步骤都加上。网络断了、页面卡了、学校服务器崩了——这些意外情况都要能优雅地处理而不是直接崩溃。我第一次写抢座流程没加Try-Catch跑了一晚上半夜学校服务器维护了流程直接报错停了。第二天早上起来发现什么都没抢到。五、网页自动化搞定学校内网系统学校的内网系统大多是老旧的Web页面有很多坑。这一节把我踩过的坑全部告诉你。等待策略非常重要。学校服务器响应慢不能点完就立刻下一步。我一般用元素出现再继续等待时间设5-10秒。弹窗处理在学校系统里特别常见。有些学校系统会弹欢迎使用的提示框要手动点掉才能继续。我总结的弹窗处理流程先Try-Catch包住操作Catch里判断弹窗是否存在存在就点关闭。如果关不掉发ESC键。还不行就用图像识别点关闭按钮。翻页在采集学术资源的时候会用到。知网、万方的搜索结果有好几页要自动翻页采集。不确定总页数的处理方式判断下一页按钮是否可点击disabled属性可点击就继续翻不可点击就停止。//a[classnext-page and not(contains(class,disabled))]懒加载在学术资源网站很常见。滚动页面才会加载更多论文。处理方案先记当前论文数量然后向下滚动再统计一次数量不变就说明加载完了。iframe在学校系统里非常常见。有些学校把登录框放在iframe里不切换到iframe是捕获不到登录输入框的。窗口切换有些学校系统点击查看详情会弹出新窗口要用切换到指定窗口指令。六、数据处理课表和学术资源的格式化学生党用RPA数据处理主要做两件事课表整理和学术文献信息提取。Excel读写是最常用的。把学校系统里的课表导出成Excel或者把采集到的论文信息存入Excel。# 用Python处理课表Excelimportpandasaspd# 读取课表dfpd.read_excel(课表.xls)# 按星期几排序dfdf.sort_values(星期)# 保存df.to_excel(课表_整理后.xls,indexFalse)文本提取与清洗在采集论文摘要的时候非常有用。知网的论文页面源码里摘要藏在meta标签或者div里用正则表达式能提取出来importre htmlmeta namedescription content本文研究了...abstractre.findall(rcontent(.?),html)[0]JSON解析在调用学术API的时候用到。有些学校买了知网的API接口返回JSON格式要解析后提取标题、作者、摘要。数据库连接我用MySQL存我采集的论文数据方便按关键词搜索。五个常见报错连接超时——学校内网有时候不稳定加热重试中文乱码——连接串加charsetutf8mb4字段超长——摘要很长的论文数据库字段要设够长批量插入失败——用executemany不要一条条插连接泄漏——用完必须关闭连接七、鼠标键盘图像自动化处理非网页场景学校有一些系统不是网页版的是桌面客户端。这时候要用鼠标键盘模拟。模拟模式和驱动模式的区别模拟模式快但容易被检测驱动模式慢但更真实。学校系统一般不检测两种都可以。图像识别在图书馆预约系统里非常好用。有些学校的预约系统是Flash做的虽然Flash已经死了但有些老系统还在用网页元素捕获不到只能用图像识别。# 图像识别点击预约按钮# 截取预约按钮的图片保存为 reserve_btn.png# 等待图片出现(reserve_btn.png)# 点击图片(reserve_btn.png, 锚点中心)我记得当时学校的图书馆系统预约按钮是用Canvas绘制的任何网页元素捕获工具都抓不到。最后用图像识别解决了准确率大概95%剩下的5%加个重试逻辑就稳了。锚点9位置偏移图像识别默认识别图片中心但有些按钮点中心没反应比如预约按钮左边是图标右边是文字点文字才有效这时候要用偏移。八、进阶技能学术资源采集的高阶玩法HTTP请求对接学术数据库API。知网、万方、维普都有API接口学校买了的话直接调API比网页抓取稳定得多。importrequests# 知网API示例伪代码实际需要学校授权urlhttps://api.cnki.net/_searchparams{keyword:机器学习,year:2023-2024}resprequests.get(url,paramsparams)papersresp.json()[data][list]Python协同方面我用Python做了文献关键词提取。采集到一堆论文标题和摘要之后用jieba分词提取关键词帮我快速了解一个领域的研究热点。importjieba.analyse text本文研究了基于深度学习的图像识别方法...keywordsjieba.analyse.extract_tags(text,topK5)print(keywords)OCR文字识别用来处理扫描版PDF论文。有些论文是图片格式的PDF要用OCR把文字识别出来才能搜索。ADB手机自动化用来在手机上操作知网手机版。有些学校买了知网移动版在手机上能免费下载论文用RPA自动下载。TEMU店群如何管理运营九、平台实战学术资源采集的完整流程知网采集是我做过的最复杂的学术采集项目。流程是搜索关键词 → 逐一点开论文详情 → 采集标题、作者、摘要、引用量 → 下一页 → 循环。知网的反爬措施比较严。我的方案每次操作之间加随机等待2-5秒模拟真人浏览不要高频访问一小时控制在100篇以内用学校IP访问在学校内网环境下跑流程。万方和维普的结构类似但页面元素不一样XPath要重新写。我建议把三个平台的采集流程分别封装成子流程主流程按顺序调用。图书馆资源除了知网还有超星电子书、读秀学术搜索等。超星的页面是动态加载的要处理懒加载。十、系统联动课表通知和团队共享飞书消息通知用来每天提醒今天的课程。流程每天早上7点自动运行读取当天课表发飞书消息提醒。飞书多维表格用来和室友共享课程信息。我们宿舍四个人每个人的课表都存在多维表格里可以方便的找到大家都有空的时间。邮件发送用来把采集到的论文清单发给导师。有些导师不喜欢飞书习惯用邮件所以要支持邮件发送报告。定时任务配置课表提醒是每天早上7点跑图书馆抢座是每天晚上11:55开始跑12点开放预约学术资源采集是每周跑一次追踪某个关键词的最新论文。十一、工程化与规范学生项目的自我管理子流程封装我把抢座流程拆成了登录子流程、查询座位子流程、预约子流程、通知子流程。这样做的好处是调试方便哪个环节出问题改哪个。调试技巧打断点是最基本的。我还会在关键步骤后面加打印日志把当前状态输出出来。比如当前正在预约日期2024-03-15出问题的时候一看日志就知道卡在哪了。命名规范变量名要有意义。room_number比a好course_name比b好。这个问题在流程复杂之后会非常明显——你一周后再看完全看不懂a、b、c代表什么。版本选择学生用社区版就够了。如果学校买了企业版授权有些高校买了影刀的教育版可以用企业版功能更多。流程模板化我做了抢座模板、课表模板、学术采集模板新需求来了在模板基础上改效率提升很多。十二、速查表与常见报错学生党常见问题汇总元素定位失败学校系统多用动态id不要用id定位改用class或者文字定位。XPath语法报错学校系统的页面 often 有命名空间xmlns导致XPath失效。解决方案是在XPath开头加/*[local-name()xxx]或者直接用CSS选择器。Excel报错学校导出的课表经常是.xls格式老版Excel要用对应的指令读取不要用.xlsx的指令。循环报错采集学术资源的时候If判断漏掉了一些边界情况比如某篇论文没有摘要导致流程中断。解决方法是所有数据采集步骤都用Try-Catch包起来。弹窗拦截学校系统经常弹出温馨提示之类的弹窗要用处理浏览器弹窗指令。网络问题学校内网有时候不稳定所有HTTP请求和页面跳转都要加固态等待或者重试逻辑。我整理了一份学生党常用的XPath和CSS速查表放在 home.linyan.cloud需要的话可以自取。#影刀RPA #RPA教程 #学生党 #图书馆抢座 #学术采集作者林焱