解决持续循环运行时因网页地址变化造成的鼠标点击报错

遇到过很多次这种场景:在银行或某个网站上点击 iframe 框架中的一个 button,会弹出来一个新的页面,其中页面地址如下图所示:
解决持续循环运行时因网页地址变化造成的鼠标点击报错

地址中有一段以 EMP_SID 开头的字符串,在一段时间之内循环处理每一笔业务时,这个字符串不会变化,但是过了一段时间之后这个 EMP_SID 就会随机发生变化

采用设计器进行流程开发时,如果直接使用鼠标点击对页面进行拾取,生成的代码中的窗口标题包含当前 EMP_SID 地址,一旦发生了变化,鼠标点击就没法再继续运行了

解法一

RPA 设计使用说明书中有这么一段文字:

【目标属性】:显示拾取控件的属性。如拾取的是 IE 浏览器的元素,可以通过勾选“窗口标题”来确定是否在操作前进行窗口激活的操作。如果窗口标题会变动,可以通过在“标题”中设置通配符来进行匹配,如在“标题”中输入’*’。

根据提示我们可以在窗口标题中将 EMP_SID= 后面的字符串全部删除:
解决持续循环运行时因网页地址变化造成的鼠标点击报错

测试后发现即使 EMP_SID 发生了改变,也能正常鼠标点击,不会报页面找不到的错误,网址中即使有EMP_SID=JLEHDRJGCFEQCAAFHZFHANJQIIEWDSHCJPHVCZCZ这一段也不影响。

解法二

根据经验,这种 EMP_SID 一般是由 js 代码控制的,我们试着在打开新窗口之前的页面源代码中寻找一下这段 EMP_SID:
解决持续循环运行时因网页地址变化造成的鼠标点击报错

解决持续循环运行时因网页地址变化造成的鼠标点击报错

可以发现在很多地方都出现了,通过 iie.get_html 函数可以获取到这个 iframe 的元素代码,然后查询一下 src 中的内容即可,我们将EMP_SID=ANGKBEEWADIPIUJCBDDLEYAXHKGIDGJDEOEABUGK这段分离出来,并赋值给变量 emp_sid,然后在鼠标点击中的窗口标题和网址属性栏分别进行字符串格式化:
【窗口标题】r'http://ip:port/?{}returnMethod=reback& - Internet Explorer'.format(emp_id)
【网址】r'http://ip:port/ciis/querykeRemarkPop.do?{}returnMethod=reback&type=th'.format(emp_id)