Skip to content

无下一页按钮只有具体页面按钮时的翻页方法(EXEC和EVAL教程)

Naibo Wang edited this page Dec 25, 2023 · 11 revisions

本教程示例任务文件(0.6.0及以上版本):290.json,可直接放入tasks文件夹内读取此文件。

需求:部分页面下没有“下一页”按钮,翻页只能通过在第1页点击页码按钮2,在第2页点击页码按钮3……来实现。

c7d2811b7b54c5934b4e13d2acbacd67

实现方式,以中国地震台网为例,假设此网站没有翻页的下一页按钮:

A. 简单方案:选中页码1按钮 -> 选中全部 -> 循环点击每个链接:

但这种方式不常用,因为最多只能点击固定次数,如上图中的11次,而且后面会点击到其他如尾页的按钮,所以放弃。

B. Exec和Eval配合方案:

  1. 正常设计流程:打开网页 -> 输入查询条件 -> 点击查询按钮。

  2. 任务流程图左侧拖动一个自定义操作到流程图,类型为在执行环境下运行Python代码(exec操作),代码内容为:

self.page = 2

即定义一个自定义变量self.page,初始值为2,这里设置为2的原因为第一个要点击的翻页的页码按钮就是第二页:

image

  1. 正常设计提取数据流程,设计完成后浏览器操作台会自动提示是否要设置翻页操作,点击设置翻页操作选项:
  1. 此时,鼠标右键选中第2页的页码按钮,点击确认设置翻页操作,生成默认的翻页设置:

image

  1. 将上图中默认生成的XPath的li[2]改为li[eval("self.page")],即将2替换成我们的自定义变量self.page

image

此时整个XPath变成了://*[contains(@class, "pagination")]/ul[1]/li[eval("self.page")]/a[1],实际运行时,第一次循环的XPath会被替换为//*[contains(@class, "pagination")]/ul[1]/li[2]/a[1]

  1. 点击2操作后面,添加自定义操作,类型为在执行环境下运行Python代码(exec操作),代码内容为:
self.page += 1

即将自定义的页面变量self.page的值+1,则下次循环的XPath会被替换为//*[contains(@class, "pagination")]/ul[1]/li[3]/a[1],以此类推:

image

如果不同页数的翻页页码结构发生变化,可以把上面的代码写的复杂一些,如:

# 对于中国地震台网: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

这部分需要随机应变,请根据实际情况修改代码。

全部流程:

image