1. UiBot数据抓取基础与实战场景
很多刚接触RPA的朋友可能觉得网页数据抓取是个复杂的技术活,但实际上用UiBot操作起来比想象中简单得多。我去年帮一家电商公司做竞品监控时,就用这个功能每天自动抓取3万条商品数据,效率比人工提升了20倍不止。
网页抓取的核心原理就像是用程序模拟人类浏览网页的过程。当我们在浏览器里看到表格数据时,UiBot的DataScrap命令可以直接把这些结构化内容抓取下来。比如下面这段代码就能抓取百度搜索结果:
arrayData = UiElement.DataScrap({ "html":{"attrMap":{"id":"content_left","tag":"DIV"},"index":0,"tagName":"DIV"}, "wnd":[{"app":"uibotBrowser","cls":"Chrome_WidgetWin_*","title":"*"}] },{ "Columns":[{ "props":["text","url"], "selecors":[{"tag":"div"},{"tag":"h3"},{"tag":"a"}] }], "ExtractTable":0 })实际项目中我遇到过几个典型问题:首先是动态加载的网页内容需要设置延迟抓取,建议用iDelayBetweenMS参数控制翻页间隔;其次是反爬机制,可以通过随机延迟和模拟人类操作来规避。有个小技巧是先用浏览器开发者工具(F12)查看元素结构,这样写选择器会更精准。
2. 数据表的内存魔法:清洗与转换
抓下来的原始数据往往像刚挖出来的矿石——有价值但需要提炼。UiBot的数据表功能就是我们的炼金炉,能在内存中快速完成各种数据整形操作。上周我刚用这些方法帮财务部门处理了200多张混乱的报销单。
构建数据表就像给杂乱的数据穿上正装:
objDatatable = Datatable.BuildDataTable(arrayData,["商品名称","价格","销量"])数据查询是最高频的操作,语法类似SQL但更简单。比如要找出价格低于100元的商品:
objDatatable = Datatable.QueryDataTable(objDatatable,"价格<100")去重操作在处理爬虫数据时特别有用。有次我抓取招聘信息,同一职位被不同网站转载导致大量重复,用这行代码就搞定了:
objDatatable = Datatable.DropDuplicatesDataTable(objDatatable,["职位名称","公司"],"first")数据表还支持列类型转换、排序、分组等操作。有个容易踩的坑是处理空值时需要先做判断,否则容易报错。建议先用Datatable.GetRowsCount检查数据质量。
3. Excel自动化交互技巧
Excel作为数据处理的终点站,UiBot提供了丰富的操作方式。不同于简单的写入,我们可以实现更智能的交互。最近给人事部做的考勤系统就实现了自动比对打卡记录和排班表。
打开Excel文件时有个重要细节:第二个参数控制是否可见。批量处理时设为False能提升性能:
objExcelWorkBook = Excel.OpenExcel("data.xlsx",False,"Excel","","")读取数据时我推荐整列读取,效率比单元格循环高得多。比如获取A列所有数据:
arrayRet = Excel.ReadColumn(objExcelWorkBook,"Sheet1","A1")写入数据也有讲究。当需要保留原有格式时,可以用InsertRow代替WriteRange。下面这段代码会在保留表头的情况下追加数据:
Excel.WriteRange(objExcelWorkBook,"Sheet1","A2",arrayRet,False)特别注意文件占用问题。有次自动化流程报错就是因为忘记关闭Excel文件,现在我都会在Finally块里加上CloseExcel命令。
4. 端到端实战:价格监控系统
去年双十一前给客户做的电商价格监控系统,完整演示了从抓取到分析的自动化流程。这个系统每天自动抓取京东、天猫等平台的3000+商品价格,生成竞品分析报告。
核心流程分四步:
- 用DataScrap抓取商品页面,提取名称、价格、促销信息
- 数据表清洗:去重、过滤无效数据、转换价格格式
- 与本地历史价格库比对,计算价差和折扣力度
- 生成带条件格式的Excel报告,异常价格自动标红
关键代码如下:
// 价格比对逻辑 objDatatable = Datatable.QueryDataTable(objDatatable,"现价<历史价*0.9") // Excel条件格式 Excel.SetConditionalFormat(objExcelWorkBook,"Sheet1","B2:B100",_ "{'Type':'CellValue','Operator':'LessThan','Formula1':'=C2*0.9',_ 'FontColor':'FF0000','FillColor':'FFFF00'}")这个项目最大的收获是意识到异常处理的重要性。我们为每个环节都添加了错误重试机制,比如网络中断时自动重试抓取,确保夜间无人值守也能稳定运行。
5. 高效调试与性能优化
调试RPA流程就像侦探破案,需要合理使用工具。我习惯用三件套:TracePrint输出中间结果、Try-Catch捕获异常、Log.Error记录错误上下文。
性能优化方面有几个实用技巧:
- 数据表操作比直接操作Excel快10倍以上
- 减少浏览器可视化操作,优先使用后台模式
- 批量读写数据,避免频繁的单个单元格操作
- 合理设置延迟,特别是网页加载和Excel计算
内存管理也很关键。处理大数据量时,我每隔5000行会清理一次对象:
If i Mod 5000 = 0 Then Datatable.ClearDataTable(objDatatable) GC.Collect() End If最近发现UiBot 6.0的异步操作功能可以进一步提升效率,特别是需要同时处理多个网页时,速度提升非常明显。
6. 企业级应用中的注意事项
在企业环境部署自动化流程时,会遇到一些开发阶段没有的问题。比如权限控制,我们给不同部门设置了不同的数据访问权限:
sUser = Sys.GetEnvironmentVariable("username") If Not List.Contains(["财务部","市场部"],sUser) Then Log.Error("无权访问此数据") Exit End If另一个常见需求是定时任务。Windows计划任务配合UiBot命令行模式是个轻量级解决方案:
start "" "C:\UiBot\worker.exe" run /file:"D:\RPA\price_monitor.ubt" /quiet日志系统也必不可少。我们开发了自动归档和邮件报警功能,当异常数据超过阈值时会立即通知负责人。