不管是应对考试,还是学习交流,祝大家都考取成功。这篇文章专门介绍考试的整个流程与套路。
题目简单分为两类:登录网页,登录订单管理系统。
登录网页目前有两个题目:
1.商品库存导出 特点: 比对数据勾选项目
获取网页订单的数据,然后与库存的项目一个一个对比。
2.客户信息筛选 特点:爬取链接后合并文本表格
获取客户的数据(会加载数据那个)
订单管理系统有三个题目:
3.商品销量排行 特点:各分组销量最多数据排序
只需要爬取订单数据商品编号分类销量最多。
4.订单数据录入 特点:随机排列字段录入数据
爬取订单数据录入
5.客户信息录入 特点:爬取窗口非单元格项目
爬取客户的信息,然后录入
考试时打开桌面的【中级实践题】查找题目是哪一个
作者只做过前面四道题目,最后一道只做过一次,卡在数据爬取了,所以不是很了解。有把握的是前面三道题目,前三道已经通过考试认证了,第四道题目和第五道题目太难了,不想研究了。
接下来是每个题目你都要做的事情,如果你都知道请看各个详细题目
Uibot6.0版本修改元素属性可以通过鼠标光标移动到绿色(元素)部分打开【编辑】。
也可以通过打开【Ui分析器】找到元素设为目标函数进行编辑。
如果没有学习过html,css,窗口程序基础的,推荐第一个方法,先去识别一个的元素,这个元素不是选择好了就可以了,还需要通过编辑修改让元素适配,如果找的不是这个元素,可以打开Ui分析器左边的目录找到它的父元素或者子元素。
之前有个题目需要爬取公司的主页,但是直接数据爬取选择的数据只有网页这个文本,爬不到链接,要爬取链接需要设置爬取目标为链接(html中链接元素用<a></a>表示,链接有一个属性herf="https:xxx",这个href就是要爬取的链接,但是选择表格它只会爬取到<em></em>,因为元素可以嵌套所以它的结构大概就是:
<td><a href="xxxxxx"><em>网页</em></a></td> td代表单元格。
(UI分析器图片)
这一步骤会在获取客户订单专栏详细介绍。
上面介绍的例子是错选的问题,就是选择的元素不是需要的,本来选的是链接,但实际是文本这种情况。
接下来是漏选的问题,这个问题就是识别的元素不够通用,它没有共性。以本题目举例,框线项目属性如下:
(框线项目属性)
需要注意唯一的区别就是title后面会有(142982)这条属性改为*,表示在其他属性不变下任意title都可以,那么不管你拿张三登录还是李四登录,都会找到。所以避免漏选的最好方法是排除个性,在【编辑】界面找到比较特殊的属性全部去掉或者改为*,这样不管张三的页面还是李四的页面都可以识别。一般来说要修改的属性title,anname容易出现漏选,其他的都不会。
有个万能方法可以让你找到造成漏选的属性,就是找不同游戏,小时候我玩过两张奥特曼图片来找不同,不过现在给两段代码找不同。现在你只需要获取张三登录时候这个元素的源代码,粘贴到一边。李四登录的时候有同理。然后比较两个代码有什么不同。换言之,你可以刷新一遍重新识别元素,粘贴,然后比较哪些属性不同,对不同的属性进行适配

如果不进行元素匹配就会出现下面的错误:元素未找到,就是没有给元素做适配处理。

考试时候最好对每个选择的元素进行适配处理,一般要修改的是title,name,anname这三个属性。
这个步骤不能像复制代码一样,复制过来就可以用了,需要自己仔细加工。
2.Python插件问题
Uibot考试完全支持python插件,不是我擅长python非要用这个,而是真不需要很麻烦的操作(官网明明有教程),并且在数据处理方面比原有uibot方便很多。不要跟我杠为什么不用人家自己的,你自己写试试看就知道多复杂了。
在【文档】-【UiBot】文件夹-【creator】-【Project】-【你的流程名字】-【extend】-【python】下面新建一个文本文档txt.随便命名,我一般是Py.txt,然后改后缀txt为py,点击会弹出是否更改拓展,点确定就可以。

这样用记事本打开,考试的时候没有安装python调试环境,所以只能修改,不能调试,你不会你粘贴不就行了。
然后不要只保存,要选择另存为,有一个编码方式,一定要选utf-8。选择替换原文件。(当然一般记事本是默认utf-8)。
然后完了,需要更改代码,粘贴用记事本打开就可以了。Python是非常注重缩进的语言,记得检查缩进,不要无脑粘贴。保持代码整齐规范。
3.保存文件问题
有的题目最后会有保存文件到某个路径,一般是c:/exam_data/rpa/level2这个路径,注意! 这个是绝对路径。Uibot提供了一种相对路径,保存文件资源在流程里的方法:@res""。
比如使用打开Excel命令:
objExcelWorkBook = Excel.OpenExcel(@res"模版.xlsx",True,"Excel","","")
res是你的流程文件下的子文件夹,QQ群不是喜欢@全体成员吗,这里作用是一样的。
字符串""内就是文件夹里文件。

所以考试会给你模版文件。这个文件不是保存它说的c:/exam_data下,这个绝对路径是放考试结果的地方。可以先把模版文件下载到res文件(注意是你要的流程res,当然考试你只会建一个流程)下,然后写代码就可以用@res""了
res保存的模版和extend/python保存的python文件都是在你的流程文件夹,会一起打包的,不用担心提交了有没有这个文件
而c:/exam_data/rpa/level2,这个路径是考试的结果的路径,一般在excel另存(保存)
另存为Excel文件命令:Excel.SaveOtherFile(objExcelWorkBook,'''c:/exam_data/rpa/level2''')
4.登录流程解决办法:
登录来也流程创造者-新建流程,随便取名
Py文件代码
import re
def match(text):
pattern = r'\d+/(\d+)'
match = re.search(pattern, text)
return match.group(1) if match else None
#作用,获取列表项最后一页页数
def is_same_str(s,arr):
return s in arr
#作用,返回布尔型,判断字符串s是否在数组里
def flatten_list(nested_list):
return [item for sublist in nested_list for item in sublist]
#作用,去除嵌套列表[[1,2]]
Uibot代码
流程块一:登录来也网页
Dim hWeb,bRet,sRet,sText
hWeb = WebBrowser.Create("chrome","https://sim-academy.laiye.com/produce-manager/5182838/login",30000,{"bContinueOnError":false,"iDelayAfter":300,"iDelayBefore":200,"sBrowserPath":"","sStartArgs":""}) Keyboard.InputText(@ui"输入控件<input>","UiBot_140863",true,20,10000,{"bContinueOnError": false, "iDelayAfter": 300, "iDelayBefore": 500, "bSetForeground": true, "sSimulate": "message", "bValidate": false, "bClickBeforeInput": false}) Keyboard.InputText(@ui"输入控件1<input>","DMyI7s",true,20,10000,{"bContinueOnError": false, "iDelayAfter": 300, "iDelayBefore": 500, "bSetForeground": true, "sSimulate": "message", "bValidate": false, "bClickBeforeInput": false})
//注意设置输入控件1,2,3的属性
Do bRet = UiElement.Exists(@ui"菜单项目_库存1",{"bContinueOnError":false,"iDelayAfter":300,"iDelayBefore":200}) If bRet Break End If sText = LocalOCR.ScreenOCR(@ui"图像<img>",{"x":0,"y":0,"width":0,"height":0},"SceneText",10000,{"bContinueOnError":false,"iDelayAfter":300,"iDelayBefore":200,"bSetForeground":true}) Keyboard.InputText(@ui"输入控件<input>3",sText,true,20,10000,{"bContinueOnError": false, "iDelayAfter": 300, "iDelayBefore": 500, "bSetForeground": true, "sSimulate": "message", "bValidate": false, "bClickBeforeInput": false}) Mouse.Action(@ui"按钮<button>_登录","left","click",10000,{"bContinueOnError": false, "iDelayAfter": 300, "iDelayBefore": 200, "bSetForeground": true, "sCursorPosition": "Center", "iCursorOffsetX": 0, "iCursorOffsetY": 0, "sKeyModifiers": [],"sSimulate": "simulate", "bMoveSmoothly": false}) Loop While not bRet
流程块二:订单数据查询
Mouse.Action(@ui"菜单项目_订单","left","click",10000,{"bContinueOnError": false, "iDelayAfter": 300, "iDelayBefore": 200, "bSetForeground": true, "sCursorPosition": "Center", "iCursorOffsetX": 0, "iCursorOffsetY": 0, "sKeyModifiers": [],"sSimulate": "simulate", "bMoveSmoothly": false})
hWeb = WebBrowser.BindBrowser("chrome",7000,{"bContinueOnError":false,"iDelayAfter":300,"iDelayBefore":200})
sRet = WebBrowser.RunJS(hWeb,"function(){document.querySelector('#main > div > div > div.home-main > div:nth-child(2) > form > div:nth-child(1) > div.ant-col.ant-form-item-control > div > div > div > div > input').readOnly=false;document.querySelector('#main > div > div > div.home-main > div:nth-child(2) > form > div:nth-child(2) > div.ant-col.ant-form-item-control > div > div > div > div > input').readOnly=false;return 123}",true,{"bContinueOnError":false,"iDelayAfter":300,"iDelayBefore":200})
//注意这里的document.querSelector('')单引号内的内容
//右键日期input有个检查,有个copy,选择copy selector粘贴就是#main这一坨了
//短期内不需要修改
Keyboard.InputText(@ui"输入控件<input>5","2021-08-28",true,20,10000,{"bContinueOnError": false, "iDelayAfter": 300, "iDelayBefore": 500, "bSetForeground": true, "sSimulate": "message", "bValidate": false, "bClickBeforeInput": false})
Keyboard.Press("Enter", "press", [],{"iDelayAfter": 300, "iDelayBefore": 200, "sSimulate": "simulate"})
Keyboard.InputText(@ui"输入控件<input>6","2021-09-07",true,20,10000,{"bContinueOnError": false, "iDelayAfter": 300, "iDelayBefore": 500, "bSetForeground": true, "sSimulate": "message", "bValidate": false, "bClickBeforeInput": false})
Keyboard.Press("Enter", "press", [],{"iDelayAfter": 300, "iDelayBefore": 200, "sSimulate": "simulate"})
Mouse.Action(@ui"按钮<button>_查询","left","dbclick",10000,{"bContinueOnError": false, "iDelayAfter": 300, "iDelayBefore": 200, "bSetForeground": true, "sCursorPosition": "Center", "iCursorOffsetX": 0, "iCursorOffsetY": 0, "sKeyModifiers": [],"sSimulate": "simulate", "bMoveSmoothly": false})
流程块三:爬取数据和比对数据
Dim arrayData=[],objDatatable,sRet,iPageNum,arrElement
Import Py sRet = UiElement.GetValue(@ui"列表项<li>_1/3",{"bContinueOnError":false,"iDelayAfter":300,"iDelayBefore":200}) iPageNum = CInt(Py.match(sRet)) for i = 1 to iPageNum Step 1 Keyboard.InputText(@ui"输入控件<input>_1",i,true,20,10000,{"bContinueOnError": false, "iDelayAfter": 300, "iDelayBefore": 500, "bSetForeground": true, "sSimulate": "message", "bValidate": false, "bClickBeforeInput": false}) Keyboard.Press("Enter", "press", [],{"iDelayAfter": 300, "iDelayBefore": 200, "sSimulate": "simulate"}) Delay(2000) arrayData = concat(arrayData,UiElement.DataScrap({"wnd":[{"cls":"Chrome_WidgetWin_1","title":"*","app":"chrome"},{"cls":"Chrome_RenderWidgetHostHWND","title":"Chrome Legacy Window"}],"html":[{"tag":"DIV","id":"main"}]},{"ExtractTable":0,"Columns":[{"selecors":[{"tag":"div","index":0,"className":"produce-manager","value":"div.produce-manager","prefix":""},{"tag":"div","index":0,"className":"produce-manager-home","value":"div.produce-manager-home","prefix":">"},{"tag":"div","index":0,"className":"home-main","value":"div.home-main","prefix":">"},{"tag":"div","index":0,"className":"ant-table-wrapper","value":"div.ant-table-wrapper","prefix":">"},{"tag":"div","index":0,"className":"ant-spin-nested-loading","value":"div.ant-spin-nested-loading","prefix":">"},{"tag":"div","index":0,"className":"ant-spin-container","value":"div.ant-spin-container","prefix":">"},{"tag":"div","index":0,"className":"ant-table ant-table-small ant-table-bordered","value":"div.ant-table.ant-table-small.ant-table-bordered","prefix":">"},{"tag":"div","index":0,"className":"ant-table-container","value":"div.ant-table-container","prefix":">"},{"tag":"div","index":0,"className":"ant-table-content","value":"div.ant-table-content","prefix":">"},{"tag":"table","index":0,"className":"","value":"table","prefix":">"},{"tag":"tbody","index":0,"className":"ant-table-tbody","value":"tbody.ant-table-tbody","prefix":">"},{"tag":"tr","value":"tr","index":0,"prefix":">"},{"tag":"td","index":5,"className":"ant-table-cell","value":"td:nth-child(5)","prefix":">"}],"props":["text"]}]},{"objNextLinkElement":'',"iMaxNumberOfPage":5,"iMaxNumberOfResult":-1,"iDelayBetweenMS":1000,"bContinueOnError":False})) Delay(1000) Next objDatatable = Datatable.BuildDataTable(arrayData,["商品编码"]) objDatatable_drop = Datatable.DropDuplicatesDataTable(objDatatable,["商品编码"],"first") objDatatable_drop=Datatable.GetDataTableByArray(objDatatable_drop,false) arr商品编码=Py.flatten_list(objDatatable_drop) TracePrint(arr商品编码) Mouse.Action(@ui"菜单项目_库存","left","click",10000,{"bContinueOnError": false, "iDelayAfter": 300, "iDelayBefore": 200, "bSetForeground": true, "sCursorPosition": "Center", "iCursorOffsetX": 0, "iCursorOffsetY": 0, "sKeyModifiers": [],"sSimulate": "simulate", "bMoveSmoothly": false}) data = UiElement.DataScrap({"wnd":[{"cls":"Chrome_WidgetWin_1","title":"*","app":"chrome"},{"cls":"Chrome_RenderWidgetHostHWND","title":"Chrome Legacy Window"}],"html":[{"tag":"DIV","id":"main"}]},{"ExtractTable":0,"Columns":[{"selecors":[{"tag":"div","index":0,"className":"produce-manager","value":"div.produce-manager","prefix":""},{"tag":"div","index":0,"className":"produce-manager-home","value":"div.produce-manager-home","prefix":">"},{"tag":"div","index":0,"className":"home-main","value":"div.home-main","prefix":">"},{"tag":"div","index":0,"className":"ant-table-wrapper","value":"div.ant-table-wrapper","prefix":">"},{"tag":"div","index":0,"className":"ant-spin-nested-loading","value":"div.ant-spin-nested-loading","prefix":">"},{"tag":"div","index":0,"className":"ant-spin-container","value":"div.ant-spin-container","prefix":">"},{"tag":"div","index":0,"className":"ant-table ant-table-small ant-table-bordered","value":"div.ant-table.ant-table-small.ant-table-bordered","prefix":">"},{"tag":"div","index":0,"className":"ant-table-container","value":"div.ant-table-container","prefix":">"},{"tag":"div","index":0,"className":"ant-table-content","value":"div.ant-table-content","prefix":">"},{"tag":"table","index":0,"className":"","value":"table","prefix":">"},{"tag":"tbody","index":0,"className":"ant-table-tbody","value":"tbody.ant-table-tbody","prefix":">"},{"tag":"tr","value":"tr","index":0,"prefix":">"},{"tag":"td","index":4,"className":"ant-table-cell","value":"td:nth-child(4)","prefix":">"}],"props":["text"]}]},{"objNextLinkElement":'',"iMaxNumberOfPage":5,"iMaxNumberOfResult":-1,"iDelayBetweenMS":1000,"bContinueOnError":False}) TracePrint(len(data)) For row =2 to len(data)+1 step 1 if Py.is_same_str(data[row-2][0],arr商品编码) UiElement.SetCheck(@ui"复选框_",true,{"bContinueOnError":false,"iDelayAfter":300,"iDelayBefore":200}) end if Next Mouse.Action(@ui"按钮<button>_导出选中项","left","click",10000,{"bContinueOnError": false, "iDelayAfter": 300, "iDelayBefore": 200, "bSetForeground": true, "sCursorPosition": "Center", "iCursorOffsetX": 0, "iCursorOffsetY": 0, "sKeyModifiers": [],"sSimulate": "simulate", "bMoveSmoothly": false}) Keyboard.InputText(@ui"窗口_库存_20240606093219.xlsx","c:\\exam_data\\rpa\\level2\\商品库存表.xlsx",true,20,10000,{"bContinueOnError": false, "iDelayAfter": 300, "iDelayBefore": 500, "bSetForeground": true, "sSimulate": "message", "bValidate": false, "bClickBeforeInput": false}) Mouse.Action(@ui"窗口_保存(S)","left","click",10000,{"bContinueOnError": false, "iDelayAfter": 300, "iDelayBefore": 200, "bSetForeground": true, "sCursorPosition": "Center", "iCursorOffsetX": 0, "iCursorOffsetY": 0, "sKeyModifiers": [],"sSimulate": "simulate", "bMoveSmoothly": false})
【订单数据筛选】
python代码
import re
import pandas as pd
def match(text):
pattern = r'\d+/(\d+)页'
match = re.search(pattern, text)
return match.group(1) if match else None
def drop(lst2d):
return lst2d[1:]
def rank( dataframe ):
# 注意,注意,考试每个题目的字段都是不一样的,可能商品编码叫做商品编号,你要自己改一下,包括订单数量,有时候是数量,需要自己修改!
grouped=dataframe.groupby ( '商品编码' ).apply (lambda x: x.sort_values ( '订单数量' , ascending = False ).head ( 1 ) ).reset_index ( drop = True )
return grouped.sort_values('订单数量',ascending = False)
Uibot代码
流程块一:登录订单管理系统
Dim iPID,bRet,sText
iPID = App.Start('''C:\soft\订单管理系统\订单管理系统.exe''', 1, 1)
UiElement.Wait(@ui"客户端_订单管理系统-登录","show",10000,{"bContinueOnError":false,"iDelayAfter":300,"iDelayBefore":200})
Keyboard.InputText(@ui"可编辑文本_用户","UiBot_140613",true,20,10000,{"bContinueOnError": false, "iDelayAfter": 300, "iDelayBefore": 500, "bSetForeground": true, "sSimulate": "message", "bValidate": false, "bClickBeforeInput": false})
Keyboard.InputText(@ui"可编辑文本——密码","yHFUSN",true,20,10000,{"bContinueOnError": false, "iDelayAfter": 300, "iDelayBefore": 500, "bSetForeground": true, "sSimulate": "message", "bValidate": false, "bClickBeforeInput": false})
Do
bRet = UiElement.Exists(@ui"窗口_登录",{"bContinueOnError":false,"iDelayAfter":300,"iDelayBefore":200})
sText = LocalOCR.ScreenOCR(@ui"窗格_密码:",{"x":0,"y":0,"width":0,"height":0},"SceneText",10000,{"bContinueOnError":false,"iDelayAfter":300,"iDelayBefore":200,"bSetForeground":true})
Keyboard.InputText(@ui"可编辑文本_yzm",sText,true,20,10000,{"bContinueOnError": false, "iDelayAfter": 300, "iDelayBefore": 500, "bSetForeground": true, "sSimulate": "message", "bValidate": false, "bClickBeforeInput": false})
Mouse.Action(@ui"窗口_登录","left","click",10000,{"bContinueOnError": false, "iDelayAfter": 300, "iDelayBefore": 200, "bSetForeground": true, "sCursorPosition": "Center", "iCursorOffsetX": 0, "iCursorOffsetY": 0, "sKeyModifiers": [],"sSimulate": "simulate", "bMoveSmoothly": false})
BRet = UiElement.Exists(@ui"对话框",{"bContinueOnError":false,"iDelayAfter":300,"iDelayBefore":200})
If BRet
Mouse.Action(@ui"窗口_确定","left","click",10000,{"bContinueOnError": false, "iDelayAfter": 300, "iDelayBefore": 200, "bSetForeground": true, "sCursorPosition": "Center", "iCursorOffsetX": 0, "iCursorOffsetY": 0, "sKeyModifiers": [],"sSimulate": "simulate", "bMoveSmoothly": false})
End If
If not bRet
Break
End If
Loop While bRet
流程块二:查询订单数据
//注意这里的所有框线项目都需要设置属性title=*
Mouse.Action(@ui"框线项目_0","left","click",10000,{"bContinueOnError": false, "iDelayAfter": 300, "iDelayBefore": 200, "bSetForeground": true, "sCursorPosition": "Center", "iCursorOffsetX": 0, "iCursorOffsetY": 0, "sKeyModifiers": [],"sSimulate": "simulate", "bMoveSmoothly": false})
Delay(1000)
Mouse.Action(@ui"框线项目_1","left","click",10000,{"bContinueOnError": false, "iDelayAfter": 300, "iDelayBefore": 200, "bSetForeground": true, "sCursorPosition": "Center", "iCursorOffsetX": 0, "iCursorOffsetY": 0, "sKeyModifiers": [],"sSimulate": "simulate", "bMoveSmoothly": false})
Delay(1000)
Mouse.Action(@ui"框线项目_2","left","click",10000,{"bContinueOnError": false, "iDelayAfter": 300, "iDelayBefore": 200, "bSetForeground": true, "sCursorPosition": "Center", "iCursorOffsetX": 0, "iCursorOffsetY": 0, "sKeyModifiers": [],"sSimulate": "simulate", "bMoveSmoothly": false})
Delay(1000)
Keyboard.InputText(@ui"窗口_2021年1月1日","2021-06-09",true,20,10000,{"bContinueOnError": false, "iDelayAfter": 300, "iDelayBefore": 500, "bSetForeground": true, "sSimulate": "message", "bValidate": false, "bClickBeforeInput": false})
Keyboard.InputText(@ui"窗口_2024年5月31日","2021-06-19",true,20,10000,{"bContinueOnError": false, "iDelayAfter": 300, "iDelayBefore": 500, "bSetForeground": true, "sSimulate": "message", "bValidate": false, "bClickBeforeInput": false})
Mouse.Action(@ui"窗口_查询","left","click",10000,{"bContinueOnError": false, "iDelayAfter": 300, "iDelayBefore": 200, "bSetForeground": true, "sCursorPosition": "Center", "iCursorOffsetX": 0, "iCursorOffsetY": 0, "sKeyModifiers": [],"sSimulate": "simulate", "bMoveSmoothly": false})
流程块三:爬取数据并筛选
Dim arrayData=[],sRet,arrRet,objDatatable,objExcelWorkBook
dim arr,data,res,title Import Py sRet = UiElement.GetValue(@ui"窗口_1/4页",{"bContinueOnError":false,"iDelayAfter":300,"iDelayBefore":200}) sRet = CInt(Py.match(sRet)) for i = 0 to sRet Step 1 arrayData = concat(arrayData,UiElement.DataScrap({"wnd":[{"cls":"WindowsForms*","title":"*","app":"订单管理系统"},{"cls":"WindowsForms*","ctrlname":"panel2","idx":3},{"cls":"WindowsForms*","aaname":"DataGridView","ctrlname":"dgv_order_list","idx":5}],"ctrl":[{"role":"ROLE_SYSTEM_TABLE","name":"DataGridView"}]},{"ExtractTable":1,"Columns":[]},{"objNextLinkElement":'',"iMaxNumberOfPage":5,"iMaxNumberOfResult":-1,"iDelayBetweenMS":1000,"bContinueOnError":False})) Mouse.Action(@ui"窗口_下一页","left","click",10000,{"bContinueOnError": false, "iDelayAfter": 300, "iDelayBefore": 200, "bSetForeground": true, "sCursorPosition": "Center", "iCursorOffsetX": 0, "iCursorOffsetY": 0, "sKeyModifiers": [],"sSimulate": "simulate", "bMoveSmoothly": false}) Delay(1000) Next objDatatable = Datatable.BuildDataTable(arrayData,arrayData[0]) objDatatable = Datatable.DropDuplicatesDataTable(objDatatable,[],"first") arr=Datatable.GetDataTableByArray(objDatatable,false) data = Py.drop(arr) title = arrayData[0] res = Datatable.BuildDataTable(data,title) res = Py.rank(res) TracePrint(res) res=Datatable.GetDataTableByArray(res,false) //将模版文件下载到res文件夹,并且命名为模版 //这里不一定要模版.xlsx,你只需下载模版excel到res,输入@res"时候会出现依赖项,你可以自己选择有那个名字的excel objExcelWorkBook = Excel.OpenExcel(@res"模版.xlsx",true,"Excel","","") Excel.WriteRange(objExcelWorkBook,"Sheet1","A2",res,false) Delay(1000) //注意,这里的路径一切以考试要求的路径为准,将考试路径粘贴到三引号内 Excel.SaveOtherFile(objExcelWorkBook,'''C:\exam_data\rpa\level2\商品销量榜单.xlsx''') Delay(1000) Excel.CloseExcel(objExcelWorkBook,true)
【客户信息筛选】
Python代码
import re
import pandas as pd
def match(text):
pattern = r'\d+/(\d+)'
match = re.search(pattern, text)
return match.group(1) if match else None
def da(company_info,company_url):
return(
pd.DataFrame(company_info)
.set_axis(list('ABCDE'),axis=1)
.query("C=='主页'")
.reset_index()
.join(pd.DataFrame(company_url))
.set_axis(list('ABCDEFG'),axis=1)
.loc[:,list('BCGEF')]
.set_axis(['客户行业', '客户编码', '公司网址', '联系方式', '名称'],axis=1)
.query("客户行业=='农业'")
)
# 一定注意,那个列表按照考试给的模版Excel标题顺序和字段,不同考试查询行业也是不同
Uibot代码
流程块一:登录(同题目一)
Dim hWeb,bRet,sRet,sText
hWeb = WebBrowser.Create("chrome","https://sim-academy.laiye.com/produce-manager/5182838/login",30000,{"bContinueOnError":false,"iDelayAfter":300,"iDelayBefore":200,"sBrowserPath":"","sStartArgs":""})
Keyboard.InputText(@ui"输入控件<input>","UiBot_140863",true,20,10000,{"bContinueOnError": false, "iDelayAfter": 300, "iDelayBefore": 500, "bSetForeground": true, "sSimulate": "message", "bValidate": false, "bClickBeforeInput": false})
Keyboard.InputText(@ui"项目_","DMyI7s",true,20,10000,{"bContinueOnError": false, "iDelayAfter": 300, "iDelayBefore": 500, "bSetForeground": true, "sSimulate": "message", "bValidate": false, "bClickBeforeInput": false})
Do
bRet = UiElement.Exists(@ui"菜单项目_库存1",{"bContinueOnError":false,"iDelayAfter":300,"iDelayBefore":200})
If bRet
Break
End If
sText = LocalOCR.ScreenOCR(@ui"图像<img>",{"x":0,"y":0,"width":0,"height":0},"SceneText",10000,{"bContinueOnError":false,"iDelayAfter":300,"iDelayBefore":200,"bSetForeground":true})
Keyboard.InputText(@ui"输入控件<input>3",sText,true,20,10000,{"bContinueOnError": false, "iDelayAfter": 300, "iDelayBefore": 500, "bSetForeground": true, "sSimulate": "message", "bValidate": false, "bClickBeforeInput": false})
Mouse.Action(@ui"按钮<button>_登录","left","click",10000,{"bContinueOnError": false, "iDelayAfter": 300, "iDelayBefore": 200, "bSetForeground": true, "sCursorPosition": "Center", "iCursorOffsetX": 0, "iCursorOffsetY": 0, "sKeyModifiers": [],"sSimulate": "simulate", "bMoveSmoothly": false})
Loop While not bRet
流程块二:爬取+筛选客户信息
Dim arrayData,objElement,arrElement,res,objDatatable,objExcelWorkBook
Mouse.Action(@ui"菜单项目_客户","left","click",10000,{"bContinueOnError": false, "iDelayAfter": 300, "iDelayBefore": 200, "bSetForeground": true, "sCursorPosition": "Center", "iCursorOffsetX": 0, "iCursorOffsetY": 0, "sKeyModifiers": [],"sSimulate": "simulate", "bMoveSmoothly": false})
Dim company_url=[],company_arrayData=[],sRet,arrRet
Import Py
sRet = UiElement.GetValue(@ui"列表项<li>_1/4",{"bContinueOnError":false,"iDelayAfter":300,"iDelayBefore":200})
sRet = CInt(Py.match(sRet))
for i = 1 to sRet Step 1
// 抓取公司信息,注意不能抓取链接
Keyboard.InputText(@ui"输入控件<input>_1",i,true,20,10000,{"bContinueOnError": false, "iDelayAfter": 300, "iDelayBefore": 500, "bSetForeground": true, "sSimulate": "message", "bValidate": false, "bClickBeforeInput": false})
Keyboard.Press("Enter", "press", [],{"iDelayAfter": 300, "iDelayBefore": 200, "sSimulate": "simulate"})
Delay(1000)
UiElement.Wait(@ui"文字_加载完成","show",10000,{"bContinueOnError":false,"iDelayAfter":300,"iDelayBefore":200})
company_arrayData = concat(company_arrayData,UiElement.DataScrap({"wnd":[{"cls":"Chrome_WidgetWin_1","title":"*","app":"chrome"},{"cls":"Chrome_RenderWidgetHostHWND","title":"Chrome Legacy Window"}],"html":[{"tag":"TABLE","idx":1}]},{"ExtractTable":1,"Columns":[]},{"objNextLinkElement":'',"iMaxNumberOfPage":5,"iMaxNumberOfResult":-1,"iDelayBetweenMS":1000,"bContinueOnError":False}))
Delay(1000)
// 然后是抓取链接的问题,这里最好定义一个变量row_end替换下面的11
for row = 2 to 11 Step 1
sRet = UiElement.GetAttribute(@ui"链接<a>","href",{"bContinueOnError":true,"iDelayAfter":300,"iDelayBefore":200})
company_url = push(company_url,sRet)
Next
Delay(1000)
Next
//对客户信息数据处理
res = Py.da(company_arrayData,company_url)
TracePrint(res)
res=Datatable.GetDataTableByArray(res,false)
objExcelWorkBook = Excel.OpenExcel(@res"客户统计.xlsx",true,"Excel","","")
Excel.WriteRange(objExcelWorkBook,"Sheet1","A2",res,false)
Excel.SaveOtherFile(objExcelWorkBook,'''C:\exam_data\rpa\level2\客户统计.xlsx''')
Excel.CloseExcel(objExcelWorkBook,true)
这篇文章不算教程,只是整合以前做过题目的代码。需要用的时候复制粘贴。