Variable

变量可以增强脚本的灵活性以及扩展性,可以动态控制脚本的运行

脚本示例

变量可以设置在脚本的任意参数中(除"method", "next", "if", "check", "condition", "loop"关键词)

step = [{
    "method": "redirect",
    "url": "https://www.baidu.com/",
}, {
    "method": "input",
    "xpath": "//*[@id=\"kw\"]",
    "text": "__v-searchKey__",
    "if": {
        "condition": "presence",
        "xpath": "__v-button_xpath__"
    }
}, {
    "method": "clear"
}]

在编写脚本变量时,需要使用标识符"__v-{your variable}__"。否则在语法检查时会被判断为普通参数处理。

实现你自己的variable对象

你需要继承VariableBase对象,并且实现get、__contains__ 这两个方法

import crawlipt as cpt
class Variable(cpt.VariableBase):
    @cpt.check
    def __init__(self, values: dict | str):
        if isinstance(values, str):
            values: dict = json.load(values)
        self.values = values

    @cpt.check
    def get(self, key: str) -> Any:
        return self.values.get(key)

    @cpt.check
    def __contains__(self, key: str):
        return key in self.values

上述实现已在crawlipt中内置

内置variable对象

脚本中的变量会在执行期间被自动替换,你可以创建crawlipt内置的Variable对象,初始化参数为字典或者json格式字符串。字典中需要将你的变量名以及值一一对应,在执行期间会替换脚本中的变量名为你设置的变量值。

import crawlipt as cpt
v = cpt.Variable({
            "searchKey": "hello",
            "button_xpath": "//*[@id=\"su\"]"
        })
loader = cpt.Script(step, interval=3)
loader.process(webdriver=webdriver,
               variable=v) # 在执行阶段传入变量对象

最后更新于