这一题要求全部xpath写,所以就没捕获元素的环节,xpath就在具体逻辑上一块讲。

1.连接手机。
影刀能调通手机,这个没什么好讲的。

2.打开美团app。
我这个的做法,就是先给手机滑到最左边,就是搜索屏的位置。
然后再往右滑,看看有没APP叫美团,有就点进去,然后结束循环。
搜索屏的xpath是
//*[@resource-id='com.hihonor.hiboard.feature_person:id/editSearch']
其实这个resource-id,ui树打出来看不见,是从捕获元素里偷的。
找美团app名字的xpath就比较简单
//*[@text='美团']
不管你是什么,名字叫美团,点就完事了

3.点击周边旅游、景点。

上图里滑动图标框的xpath
//*[@resource-id='com.sankuai.meituan:id/native_viewpager']
周边旅游的xpath
//*[@resource-id='com.sankuai.meituan:id/native_viewpager']//*[@content-desc='周边旅游']
景点的xpath
//*[@text='景点']

这部分最需要注意的是滑动图标框的参数,把默认的800改成400,可以避免有时候无法滑动成功。



4.核心流程
标题xpath
//*[contains(@text,'条评价')]/../../../*[1]/*[1]
评分xpath
//*[contains(@text,'条评价')]/preceding-sibling::*[1]/*[1]
评价数
//*[contains(@text,'条评价')]
距离
//*[contains(@text,'条评价')]/../../following-sibling::*[1]//*[contains(@text,'距你')]
这个原理就是以评价数为锚点,然后找到其他几个参数。
然后我们不断小拉,获取新的数据。
这里要注意,要把滑动时间从默认的800改成1800,避免有东西被滑漏了。
而滑动的时候也会出现几个问题:
4.1 数据重复的问题。
将标题作为唯一性值,写入一个列表,每次进行对比。
4.2 标题无法获取
滑动适合,第一个景点可能刚好卡一半,这样子捕获的标题内容就是空。
我们就需要对标题为空的进行过滤,不写入。
而这个标题也是这几个xpath里最不稳定的。
之前我的写法是按前节点索引。但是像“妈祖阁”这个景点,他中间节点就比其他景点少。
现在的写法就是找到共同的父元素,然后标题是第一个节点。
4.3距离无法获取
其实这个问题类似于4.2
这种问题会出现在最后一个节点,刚好把“距你**km”卡没了。
这个处理的更粗暴点,直接try写入,不行就跳过。
4.4循环的问题。
计算标题的相似元素有几个,然后for循环,一对一。虽然感觉不是非常严谨,但是多次测试,也没任何问题。
4.5中断执行
中断有两种情况,一个是题目要求的,到达20次,循环的适合就持续判断标题总列表的数量,到达20就直接中断。
还有一种,就是列表到底了。
这种情况就是循环相似元素之前,b=0,如果有新的写入出现,b=1
在循环结束后,如果b==0,那么说明已经没有新的景点,直接中断循环。
这道题主要还是在调试xpath的时间上,手机xpath调试太麻烦了。
OK,如上就是我的整个思路逻辑。欢迎讨论交流。