修改拓展影刀自带得原生指令且不改变原先使用方法
回答
收藏

修改拓展影刀自带得原生指令且不改变原先使用方法

l
lubupang
2023-06-27 10:27·浏览量:771
l
lubupang
发布于 2023-06-27 10:23更新于 2023-06-27 10:27771浏览

用处:很多时候做验证码得判定,是希望每次点击(或者其他行为)发生后都进行判定。

难点:

  1. 希望尽量少得改动已开发好得流程。
  2. 团队开发,尽量不改变大家原有得拖拉拽习惯

思考:

  • 基于第一个点,以点击元素(WEB)这个指令为例,海量已经开发好得流程使用到了拖拉拽下来得点击元素(WEB)这个指令。如果,通过制作一个指令点击元素(指令),然后里面使用点击元素(WEB)一样得参数,里面流程改成  点击元素(WEB)->验证子令1->验证子令2->....这种状态就面临海量修改问题把,点击元素(WEB)这个官方动作,替换为点击元素(指令),这个指令动作并重新设置参数。这样就很麻烦
  • 基于2,就是无感点击元素(WEB)还是拖拉拽使用自带,但是实际执行得是我们modify得效果

实现:

利用钩子,以打印日志这个原生功能为例,module1.py

import xbot

import xbot_visual

from xbot import print, sleep

from .import package

from .package import variables as glv

pppp=xbot_visual.programing.log #具体函数可以找到流程下得py文件去看,这个不赘述了,先复制一个函数,防止后面循环改动

def hhhh(mysupertext,*args,**argvs):

    '''

    拓展原生得函数,此处mysupsertext 可以是从glv来得dict ,然后写一系列复杂得处理就可以把参数传递了

    '''

    argvs['text']=mysupertext+(argvs['text'] if 'text' in argvs else '')

    return pppp(*args,**argvs)



def main(args):

    '''

    篡改原生函数

    '''

    global hhhh

    xbot_visual.programing.log=slog


def slog(*args,**argvs):

    '''

    保持和原生函数同参

    '''

    global hhhh

    return hhhh('哈哈哈',*args,**argvs)

效果  核心开打印结果   这条原生命令都是打印日志  1111但是 在单独执行测试时是1111,但是在测试2 先执行了module1得时候,就变成了 哈哈哈1111

单独执行  测试


执行测试1 流程 及先执行module 1 再执行  测试

我们可以明显看到在为改变测试得前提下,修改了测试得输出

通用得原理利用到点击元素(WEB)等自带指令,只需要在主流程第一行,执行你得篡改代码,就可以使得后续使用完成变成你自定义得

收藏
全部回答1
最新
发布回答
回答