Script

本章介绍脚本的基本使用。脚本使用json格式定义,在各种语言中,你都可以很方便将它反序列化。

转换方式

import crawlipt as cpt

# 在编写阶段可以使用python内置字典类型进行编写
script = { 
    "method": "redirect",
    "url": "https://www.baidu.com/",
    "next": {
        "method": "input",  # 方法名
        "xpath": "//*[@id=\"kw\"]", # 方法对应参数
        "text": "百度贴吧", # 方法对应参数
        "next": { # 下一个要执行的脚本
            "method": "click",
            "xpath": "//*[@id=\"su\"]"
        }
    }
}
# 转换为了一个json字符串,可以将它存储在物理介质中
script_json = cpt.Script.generate_json(script) 

执行脚本

脚本可以映射所有的action方法

webdriver = getDriver()
# 传入一个预先编写好的脚本,支持json字符串,python字典、列表类型
loader = cpt.Script(script, interval=0.1)
# 传入你配置好的selenium的webdriver对象进行执行
loader.process(webdriver) 
# loader(webdriver) 
# 你需要关闭你的webdriver在执行后
webdriver.quit()

脚本初始化参数介绍

参数名
类型
介绍

script

dict | str | list

预先编写好的脚本

global_script

dict | str | list = None

全局执行脚本,这个脚本将在每次执行任意一个action方法前进行执行。例如:有的网站会随机弹出广告,影响下面脚本的执行,定义该脚本可以在执行action方法前判断是否有广告,如果有的话去进行一系列操作关闭广告

interval

float = 0.5

每两次action方法执行的间隔

wait

float = 10

如果action方法中含有xpath或css参数,则会自动隐式等待wait秒,直到对应元素在dom结构中出现

is_need_syntax_check

bool = True

是否需要执行前严格的脚本语法检查,如果关闭会增加执行时的错误概率

脚本执行器参数介绍

参数名
类型
介绍

WebDriver

selenium的webdriver对象,需要根据情况自行配置

VariableBase | None = None

本次执行的变量值

StoreBase | None = None

本次执行的存储器

通过列表step方式编写脚本

通过字典类型进行编写脚本,在action多的情况下,可能会导致嵌套字典过深,维护困难。使用列表方式编写脚本可以将嵌套流程变为串行流程。

step = [{
            "method": "redirect",
            "url": "https://fanyi.baidu.com/mtpe-individual/multimodal#/",
        }, {
            "method": "input",
            "xpath": "//*[@id=\"editor-text\"]/div[1]/div[1]/div/div/div/div",
            "text": "你好,世界",
        }, {
            "method": "getInnerText",
            "xpath": "//*[@id=\"trans-selection\"]/div/span",
        }]

# 你可以使用generate,将列表脚本变为字典脚本
script_dict = cpt.Script.generate(step)
# 你可以使用generate_json,将列表脚本直接变为json字符串
script_json = cpt.Script.generate_json(step)
# 执行器也可以直接执行列表脚本
loader = cpt.Script(step, interval=0.1)
loader.process(webdriver) 

最后更新于