-
-
Notifications
You must be signed in to change notification settings - Fork 4.4k
无下一页按钮只有具体页面按钮时的翻页方法(EXEC和EVAL教程)
Naibo Wang edited this page Dec 25, 2023
·
11 revisions
本教程示例任务文件(0.6.0及以上版本):290.json,可直接放入tasks
文件夹内读取此文件。
需求:部分页面下没有“下一页”按钮,翻页只能通过在第1页点击页码按钮2,在第2页点击页码按钮3……来实现。
实现方式,以中国地震台网为例,假设此网站没有翻页的下一页按钮:
A. 简单方案:选中页码1按钮 -> 选中全部 -> 循环点击每个链接:
但这种方式不常用,因为最多只能点击固定次数,如上图中的11次,而且后面会点击到其他如尾页的按钮,所以放弃。
B. Exec和Eval配合方案:
-
正常设计流程:打开网页 -> 输入查询条件 -> 点击查询按钮。
-
任务流程图左侧拖动一个
自定义操作
到流程图,类型为在执行环境下运行Python代码(exec操作)
,代码内容为:
self.page = 2
即定义一个自定义变量self.page
,初始值为2
,这里设置为2的原因为第一个要点击的翻页的页码按钮就是第二页:
- 正常设计提取数据流程,设计完成后浏览器操作台会自动提示是否要设置翻页操作,点击
设置翻页操作
选项:
- 此时,鼠标右键选中第2页的页码按钮,点击
确认设置翻页操作
,生成默认的翻页设置:
- 将上图中默认生成的XPath的
li[2]
改为li[eval("self.page")]
,即将2替换成我们的自定义变量self.page
:
此时整个XPath变成了://*[contains(@class, "pagination")]/ul[1]/li[eval("self.page")]/a[1]
,实际运行时,第一次循环的XPath会被替换为//*[contains(@class, "pagination")]/ul[1]/li[2]/a[1]
。
- 在
点击2
操作后面,添加自定义操作
,类型为在执行环境下运行Python代码(exec操作)
,代码内容为:
self.page += 1
即将自定义的页面变量self.page
的值+1,则下次循环的XPath会被替换为//*[contains(@class, "pagination")]/ul[1]/li[3]/a[1]
,以此类推:
如果不同页数的翻页页码结构发生变化,可以把上面的代码写的复杂一些,如:
# 对于中国地震台网:https://www.ceic.ac.cn/history,由于从第二页开始他的页码结构会发生变化,因此实际上应该这样写才符合中国地震台网的实际场景:
# 第一页到第二页,应该+3因为从第二页开始,页码3对应的是第5个元素,点击的是/li[5]
if self.page == 2:
self.page = self.page + 3
else: # 从第二页开始,页码只需要+1即可,即/li[6]
self.page = self.page + 1
这部分需要随机应变,请根据实际情况修改代码。
全部流程:
Click Pages
above to see more pages