影刀RPA新手教程:旅游行业自动化完全指南——机票酒店价格监控、订单汇总与客户通知

发布时间:2026/7/1 20:53:00

影刀RPA新手教程:旅游行业自动化完全指南——机票酒店价格监控、订单汇总与客户通知 影刀RPA新手教程旅游行业自动化完全指南——机票酒店价格监控、订单汇总与客户通知我大学暑假在旅行社兼职做操作员每天的工作就是在携程、飞猪、去哪儿三个平台之间来回切比价格、录订单、发确认邮件的循环——说实话像个人肉API。那两个月下来我右手的腕管综合征都出来了。后来自己学了影刀RPA把三平台价格对比和订单汇总的流程写成自动化每天只需要打开看一眼结果就行了。这篇文章以旅行社日常运营为案例主线覆盖影刀RPA全部十二大核心模块。一、认识影刀与安装去影刀官网下载社区版安装包双击安装和装QQ没区别。装完记得在软件里点击扩展管理安装浏览器插件。旅游行业的数据大多来自各OTA平台的网页浏览器插件是网页自动化的核心依赖。我的教训第一次跑流程时发现飞猪的页面死活抓不到元素。研究了半天发现飞猪的商家后台有反爬机制会检测浏览器是否使用了自动化驱动。解决办法是在影刀的网页操作设置里开启防检测模式模拟真实用户行为。二、元素定位四合一XPath CSS 正则OTA平台的后台页面结构通常是搜索栏 列表结果 详情抽屉/弹窗。// 定位搜索出发地输入框 //input[placeholder请输入出发城市] // 定位搜索结果列表的每个酒店卡片 //div[contains(class,hotel-card)] // 按酒店名称定位价格 //span[contains(text(),北京饭店)]/ancestor::div[contains(class,card)]//span[classprice] // 定位最低价 //div[classprice-list]//span[number(text())500] // 定位下一页按钮 //li[contains(class,ant-pagination-next) and not(contains(class,disabled))] // 按日期定位航班 //div[contains(text(),2024-07-15)]/following-sibling::div//span[classflight-price]/* CSS等价方式 */input[placeholder*出发城市] div.hotel-card div.card:has(span:contains(北京饭店))span.price li.ant-pagination-next:not(.ant-pagination-disabled)选型建议OTA平台页面结构一般比较规范CSS基本能满足90%的场景。但如果要做包含具体价格的元素这种筛选CSS做不到必须用XPath的number()判断。正则提取行程信息importre# 提取价格中的数字pricere.search(r¥([\d,]),¥1,299起).group(1).replace(,,)# 1299# 提取航班号flight_nore.search(r[A-Z]{2}\d{3,4},航班CA1234).group()# CA1234# 提取日期范围datesre.findall(r\d{4}-\d{2}-\d{2},2024-07-15至2024-07-20出行)# [2024-07-15, 2024-07-20]价格提取有个隐蔽坑有些平台显示的价格是¥1,299起有些是1299元起有些是最低1299。一个正则可以写成r[\d,](?元|起)同时兜住这几种情况。店群矩阵自动化突破运营极限三、变量与数据类型# 数字——价格比较lowest_pricefloat(inf)forhotelinhotel_list:pricefloat(hotel[price].replace(,,))ifpricelowest_price:lowest_priceprice# 字符串——行程信息itinerary2024-07-15 北京→三亚 CA1234 08:00-11:30# 列表——多个平台的价格数据flight_options[{平台:携程,航班:CA1234,价格:1280},{平台:飞猪,航班:CA1234,价格:1199},{平台:去哪儿,航班:CA1234,价格:1250}]# 字典——订单详情order{订单号:TB20240624001,客户:张三,产品:三亚5天4晚自由行,出发日期:2024-07-15,人数:2,金额:5999.00,状态:已确认}# JSON——OTA平台API返回resp_jsonjson.loads(response.text)hotelsresp_json[data][searchResult][hotelList]四、流程控制# For循环——按日期范围查询每天的价格fromdatetimeimportdatetime,timedelta startdatetime(2024,7,1)enddatetime(2024,7,7)currentstartwhilecurrentend:search_date(current.strftime(%Y-%m-%d))# 收集价格数据extract_prices()currenttimedelta(days1)# 相似元素循环——处理搜索结果列表中的每个酒店cardsweb.find_all(div.hotel-card)forcardincards:namecard.find(h3.hotel-name).text pricecard.find(span.price).text hotel_data.append({名称:name,价格:price})# While循环——分页采集whileTrue:process_current_page_hotels()# 翻页——用class中不含disabled判断还有下一页try:next_btnweb.find(li.ant-pagination-next)ifdisabledinnext_btn.get_attribute(class):breaknext_btn.click()except:break五、网页自动化OTA平台的网页自动化有两大难点一是价格数据经常是动态渲染的HTML源码里没有价格二是搜索结果大量使用了懒加载需要滚动才能触发更多数据加载。等待价格渲染完成# 不能只等容器出现要等价格数字出现forattemptinrange(30):pricesweb.find_all(span.price)has_priceFalseforpinprices:ifp.text.strip()andp.text.strip()!暂无报价:has_priceTruebreakifhas_price:breaktime.sleep(1)懒加载处理# 记录已加载的酒店数量滚动页面直到数量不再增加previous_count0whileTrue:current_countlen(web.find_all(div.hotel-card))ifcurrent_countprevious_count:break# 没有更多数据了previous_countcurrent_count# 滚动到底部web.execute_js(window.scrollTo(0, document.body.scrollHeight))time.sleep(3)六、数据处理# Excel——订单汇总importopenpyxl wbopenpyxl.load_workbook(订单汇总模板.xlsx)wswb.active# 写入今天的新订单next_rowws.max_row1fororderintoday_orders:ws.cell(next_row,1,order[订单号])ws.cell(next_row,2,order[客户名称])ws.cell(next_row,3,order[产品])ws.cell(next_row,4,order[出团日期])ws.cell(next_row,5,order[金额])next_row1wb.save(订单汇总_20240624.xlsx)# 文本清洗——从OTA导出的CSV数据importcsvwithopen(携程订单导出.csv,encodinggbk)asf:readercsv.DictReader(f)orderslist(reader)# 数据库存储——旅行社管理系统connpymysql.connect(hostlocalhost,usertravel_user,passwordxxx,databasetravel_agency,charsetutf8mb4)cursorconn.cursor()sqlINSERT INTO orders (order_no, platform, customer, product, amount, depart_date) VALUES (%s, %s, %s, %s, %s, %s)cursor.executemany(sql,batch_orders)conn.commit()数据库五个报错连接超时检查host和port、权限拒绝GRANT授权、字符集不匹配导致中文问号加charset‘utf8mb4’、字段太大改VARCHAR长度、事务锁等待超时减少单次提交数据量。七、鼠标键盘图像自动化旅行社内部管理系统如果太老不能用元素定位用图像识别替代# 定位添加订单按钮image.click(添加订单按钮.png)# 等待订单表单弹窗出现image.wait_appear(订单表单标题.png,timeout10)# 填写表单各字段# 用Tab切换键盘输入keyboard.send_keys({TAB})keyboard.send_keys(三亚5天4晚自由行)keyboard.send_keys({TAB})keyboard.send_keys(2024-07-15)图像识别要注意截图的区域不要太大最好只截按钮或者输入框本身否则分辨率一变就容易匹配失败。八、进阶技能HTTP请求采集OTA平台的隐藏数据importrequests# 有些OTA平台的搜索结果有隐藏的API接口headers{User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64),Cookie:session_idxxx,Referer:https://www.ctrip.com/}resprequests.post(https://m.ctrip.com/restapi/soa2/xxx/search,json{cityId:2,checkIn:2024-07-15,checkOut:2024-07-20},headersheaders)resultsresp.json()先打开浏览器F12 → Network面板搜索一次酒店看XHR请求里哪个返回了JSON数据——这个就是API接口。OCR——识别图片公告上的航班信息textocr.recognize(航班变动通知截图.png)flight_infore.search(r(CA\d{3,4}).*?(\d{2}:\d{2}),text)Python自定义函数deffind_cheapest_option(options,platform_filterNone):在多个方案中找最低价ifplatform_filter:options[oforoinoptionsifo[平台]inplatform_filter]ifnotoptions:returnNonereturnmin(options,keylambdax:float(str(x[价格]).replace(,,)))九、平台实战三平台机票比价机器人temu店群自动化报活动案例每天早上7点自动打开携程、飞猪、去哪儿三个平台搜索指定航线两天的全部航班提取航班号、起飞时间、舱位、价格汇总到一张Excel表里自动选出每个航线的最低价选项。旅行团出团通知自动发送每天下午5点读取次日将要出发的订单列表根据订单里的客户信息生成出团通知包含集合时间、地点、导游电话、注意事项通过飞书消息自动推送给对应的客户群。这两个流程帮我们旅行社把操作岗的人工从每天6小时减少到了30分钟。十、系统联动# 飞书消息——出团提醒webhookhttps://open.feishu.cn/open-apis/bot/v2/hook/xxxmsg{msg_type:interactive,card:{header:{title:{tag:plain_text,content:明日出团提醒}},elements:[{tag:div,text:{tag:plain_text,content:f行程{order[产品]}\n航班{order[航班]}\n集合时间{order[集合时间]}}}]}}requests.post(webhook,jsonmsg)# 飞书多维表格——订单跟踪看板lark_base.create_record(tblOrders,{订单号:order[订单号],客户:order[客户],状态:待出发,出发日期:order[出发日期]})# 邮件——给供应商发送确认函send_email(tohotelsupplier.com,subject客房预订确认,bodyf请确认以下预订{order_details},attachment预订清单.xlsx)十一、工程化规范旅游行业RPA建议的工程结构主流程_每日运营自动化 ├── 子流程_登录各平台参数平台名称 ├── 子流程_价格采集参数出发地、目的地、日期范围 ├── 子流程_订单同步参数日期 ├── 子流程_出团通知参数出团日期 └── 子流程_数据汇总参数汇总日期调试经验价格采集类流程最容易出错的不是程序逻辑而是数据源不稳定——某平台突然改了页面结构XPath全挂了。我的做法是在每个采集子流程末尾加一个数据量校验assert len(prices) 0, 未采集到任何价格数据这样出问题时能第一时间定位到哪个平台。变量命名建议hotel_price_list列表类型加后缀、ORDER_STATUS_CONFIRMED常量全大写、departDate日期类型用驼峰Date。版本选择旅游门店用社区版免费足够中型旅行社用创业版配定时任务大型旅游集团用企业版做多机器人协同调度。十二、速查表与常见报错报错原因方案价格数据为空动态渲染未完成等价格文本出现再取值反爬拦截检测到自动化开防检测模式随机延时验证码登录触发人机验证接打码平台或手动登录后跑页面元素消失用懒加载替换了DOM重新获取元素对象翻页失败class命名有空格用contains匹配classCookie过期长时间运行加定时重新登录逻辑旅游行业RPA的价值不是替代人而是把人从在不同网站之间切来切去、复制粘贴的机械劳动中解放出来。我在做这些流程的过程中发现很多OTA平台其实有隐藏的API接口可以用比抓网页快几十倍。学一点HTTP请求的知识你的RPA能力会有质的飞跃。更多案例可以访问 home.linyan.cloud 。#影刀RPA #RPA教程 #旅游行业自动化 #价格监控 #订单自动化作者林焱

相关新闻