

客户想要点击工商银行网页端的时间下拉框选择时间,工商银行的网页端无法查看源码所以告别xpath方法,捕获时间下拉框元素下次登录运行元素就会失效,且观察元素编辑页面是一致的,但是每当重新捕获时两个标签之间会多出一个空白行(忘记截图了,估计是跟这个因素相关),点开时间下拉选项捕获是一个大框,无法捕获时间的相似元素列表,图像的话也很奇怪,捕获了图像ocr识别不出信息且捕获同个位置的图像,图像内容变化依然能够校验,总之就是各种buff叠满><
在正式描述问题及解决思路前给大家普及一下【获取列表指定位置项】这个指令,后面解决问题会用到,这里拿一个小案例介绍下这个指令:
我们就以影刀商城的订单管理页面为例,我想点击订单编号为"U2021062014343"的确认发货按钮,常规方法呢是循环tr父元素关联订单编号子元素去判断然后点击确认发货子元素,但是实际场景中可能遇到关联不上父元素的情况,遇到这种情况时我们可以获取订单编号相似元素列表和确认发货相似元素列表两个列表,循环订单编号文本内容列表对循环项进行判断,然后利用循环位置去定位确认发货相似元素组中对应的确认发货按钮。即用a列表判断,用满足条件的项定位出该项索引,再用此索引去b列表定位相对应的元素。方法如下图所示:


上图我们除了用【获取列表指定位置项】指令,也可以设置元素变量,用索引定位。
理解了上面的方法后,我们来进入正题
客户想要点击图示时间下拉框元素并设置时间,但是正如一开始我们提到的,这个页面buff叠满,在尝试了n多法子后,终于被我琢磨出一个稳定的方法。

根据下图所示,我们可以捕获这个红框所示的元素作为父元素,然后获取其所有的子元素,得到一个子元素列表,然后我们可以通过【获取列表指定位置项】指令去定位到这几个日期下拉框元素。

定位好下拉框元素后,问题又来了,我们点开下拉框后只能捕获大框,无法单独捕获年份及相似元素列表,这里呢我们可以用【通用设置下拉框】指令来设置想要的日期,亲测这几个下拉框都是没有问题的~

上面的问题解决后,又冒出新的问题了
这里客户想要对选择日期后的数据进行翻页操作,翻页的话,没有页码,获取元素信息为空,也没法查看元素属性,ocr识别也为空><,我一开始考虑的用图像判断,但是捕获图像后校验,下一页和上一页无论怎样调试相似度,要么是都匹配,要么就是都不匹配,这时候我又想到了相似元素列表与获取列表指定位置项的处理方式。



首先我们可以捕获页码元素的相似元素列表,最开始有两种情况,第一种情况是没有数据, 会显示一个提示文本内容,这里我忘记截图了;第二种情况是如果数据一页放的下,就会只有"打印"元素,此时相似元素列表长度为1;如果数据超出一页,第一页只显示"打印"和"下一页",相似元素列表长度为2;如果数据量比较大,点击下一页后相似元素列表长度为3,即"上一页"、"打印"和"下一页";到最后一页,相似元素列表长度又变为2了,即"打印"和"上一页"。
我们可以整理一下翻页情况,如下图所示,利用这个规律我们可以用相似元素列表的长度去做判断,然后按照情况去点击相似元素列表的最后一项。

对于第一种没有数据的情况,我用的判断方法是获取元素信息,如果没有数据元素信息会返回一个文本内容,有数据的话就没有这个元素导致指令报错,这里错误处理我们设置为忽略异常并继续执行,输出默认值设为None,这样利用输出值我们就可以判断该时间段是否有数据。

后面的话我们就可以用无限循环去判断点击,循环每开始都去获取页码的相似元素列表作判断,列表长度为1,也就是只有1页,那么我们不需要点击直接退出循环,如果页数为1页以上,那么我们第一次循环就直接点击,从下次循环开始就判断相似元素列表长度是否为2,为2就退出循环,大概的一个流程如下图所示:

针对工商银行类似网页的元素捕获问题,我们可以利用相似元素列表配合获取列表指定位置项的方法去灵活处理,若是有更好的方案大家可以在评论区交流,文章有不足之处也可以在评论区指出。