关于“获取文本”模块的一些小经验

  • 项目需求
    如下图所示,需要在客户某系统抓取红色方框中的数据。

关于“获取文本”模块的一些小经验

  • 难点

    1. 可能并不是所有人都会通过 json 发送请求,来获得数据;
    2. 我们不知道该数据有多少行;

    那样我们设计器中的“获取文本”模块就发挥到用处了。

  • 具体实现如下:
    我们用“获取文本”模块获取第一行数据,与第二行同属性下的数据,在编译成代码的时候,( 前提是该
    “获取文本”模块的属性中查找路径这一属性改为最后一个 ),发下获取两行同属性数据的代码如下:

    text1 = iie.get_text(title=r'无标题页',selector=r'body > FORM:nth-of-type(1) > DIV:nth-of-type(3) 
    > DIV:nth-of-type(2) > DIV:nth-of-type(2) > DIV:nth-of-type(3) > DIV:nth-of-type(2) >
    DIV:nth-of-type(1) > DIV:nth-of-type(1) > DIV:nth-of-type(3) > DIV:nth-of-type(1) >
    TABLE:nth-of-type(1) > TBODY:nth-of-type(1) > TR:nth-of-type(2) > TD:nth-of-type(7)',waitfor=10)
    
    text2 = iie.get_text(title=r'无标题页',selector=r'body > FORM:nth-of-type(1) > DIV:nth-of-type(3) 
    > DIV:nth-of-type(2) > DIV:nth-of-type(2) > DIV:nth-of-type(3) > DIV:nth-of-type(2) >
    DIV:nth-of-type(1) > DIV:nth-of-type(1) > DIV:nth-of-type(3) > DIV:nth-of-type(1) >
    TABLE:nth-of-type(1) > TBODY:nth-of-type(1) > TR:nth-of-type(3) > TD:nth-of-type(7)',waitfor=10)
    

    对比会发现,是有规律的。代码中的 TR 后面的数是递增的。接着我们把改数值换为 4,发现,确实能获取
    到第三行的数据。
    如此,就好办了,我们可以循环将这些递增的数以参数传入,以达到循环的去获取下一行的数据。若
    获取的为空的时候,我们再跳出循环。
    其实现代码如下:
    关于“获取文本”模块的一些小经验

  • 注意点:
    有时候,可能并不是很理想的就实现了。而本贴主在实施的时候,就遇到问题了。
    问题:问题截图如下图,会发现,再循环到不存在的行的时候,它并不能返回一个空让我们跳出循环。
    不仅如此,代码还是在不断地去获取文本,且不报错。一下子让贴主打算用 try 捕捉异常后默认没数据
    跳出循环的想法 GG 了。所以再用以上方法的时候还是要以实际的环境而定,有些环境下,但循环到
    不存在的数据,“获取文本”模块会返回空。
    关于“获取文本”模块的一些小经验

  • 其中的一种解决方法:
    遇到这种问题,项目周期又很短,贴主实在没法了,于是从源代码方向下手了。通过流程运行,设计器控制台上的信划线的位置是有关的。如是,将方框中第二代码都注释掉了,换成 return text。再次运行的时候,发现以上问题解决了,在循环获取不存在该行数据的时候是能返回空了。
    关于“获取文本”模块的一些小经验

本帖不仅仅是为了分享如何去解决类似问题,而更多的是想表达,当我们遇到了难题时,思维不要过于局限,只是有些方法可能我们尚未想到,可以尝试从更多的角度发散思维,解决问题。