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) # 在执行阶段传入变量对象
最后更新于