V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
Sponsored by
LinkedIn
不坐班的神仙工作 · 去任何你想去的地方远程,赚一线城市的工资
2000 个不用出门 Social 的全球远程工作,帮助 V2EX 的小伙伴开启全新的工作方式。
Promoted by LinkedIn
heartlocker
V2EX  ›  分享创造

Clicknium 自动操作网页和应用

  •  
  •   heartlocker · 44 天前 · 3078 次点击
    这是一个创建于 44 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Clicknium

    Clicknium 是一个 Python 界面自动化库,可以非常简单直观地使用它操作浏览器和 Windows 平台的 APP 。
    官网:https://www.clicknium.com
    Github: https://github.com/clicknium/clicknium-docs
    VS Code 插件:https://marketplace.visualstudio.com/items?itemName=ClickCorp.clicknium

    为什么要做 Clicknium

    目前 Python 有很多自动化的库,比如 Selenium ,Pyautogui ,Playwright 。有的只能操作网页,有的只能操作 App ,并且使用起来都算不上简单:Selenium 需要安装 driver ,需要学习什么是 XPath ; Pyautogui 的方式比较简单易懂,是我本人比较欣赏的方式,使用简单,代码可读性强,完全模拟鼠标单击,双击拖动;但是它采用 xy 轴的方式定位桌面元素。 分辨率变化,位置变化都会影响运行。 要想用好这些工具,学习成本实在不低。 但是大多数人的自动化需求其实非常简单。 花大量的时间和精力学习自动化技术,可能还不如自己手动点点鼠标键盘。
    好的自动化工具,需要在使用上简单,直观才能帮助更多的人。

    有多简单

    Clicknium 提供了简洁直观的 API 来操作 UI 元素,如 set_test, get_test, click 等等。查看代码时,逻辑非常清晰,贴近自然语言和实际操作。 那怎么解决元素定位的问题。 我们为此设计了 Clicknium Recorder 。 打开 Recorder ,Clicknium 会自动识别鼠标所指的元素。 按住 Ctrl+鼠标单击,Recorder 就会自动抓取元素,生成 Locator 。直接使用 Locator 就能直接获取 UI 元素并对其进行操作: locator Clicknium 还提供了智能提示和代码补全的功能: uselocator

    如何尝试

    环境:

    • Windows 7+
    • Python 3.7+
    • VS Code

    配置 Clicknium

    在 VS Code Extension 市场中搜索 Clicknium , vscextension 然后根据欢迎页面的步骤完成配置: welcome 我建议第一次使用:

    • 先运行 Welcome 页面中的Sample了解自动化运行的效果。
    • 跟着教材花 3 分钟完成你的第一个自动化程序:First Automation Project

    交流

    目前项目仍在早期阶段,团队很小。后期我们会根据需求将项目拓展到全平台。 有任何问题或者意见欢迎交流, 比如你想要 PyCharm 插件? [email protected]
    加入我们的Slack

    37 条回复    2022-08-31 12:16:17 +08:00
    RheatiN
        1
    RheatiN  
       44 天前
    试试!我们数据收集很需要这个
    tqyq88
        2
    tqyq88  
       44 天前
    Selenium 可以 headless 方式运行,请问 Clicknium 支持吗
    youthfire
        3
    youthfire  
       44 天前 via iPhone
    可惜不支持 mac
    heartlocker
        4
    heartlocker  
    OP
       44 天前   ❤️ 2
    @tqyq88 目前还不支持 headless 。要支持 headless 应该不麻烦。我把它定义在了高级功能里,现在主要想做简单。 有需求的话,我们可以加入对 headless 的支持。
    heartlocker
        5
    heartlocker  
    OP
       44 天前   ❤️ 1
    @youthfire 现在团队太小了,资源有限。跨平台妥妥在我们的 Roadmap 上。
    iyaozhen
        6
    iyaozhen  
       44 天前
    看着不错
    heartlocker
        7
    heartlocker  
    OP
       44 天前
    @RheatiN 请多多指教。
    shyling
        8
    shyling  
       44 天前
    不知道这个 locator 有没有从 id 到页面位置的 locate 。

    不然 id 多了的话还是有点晕的。

    还有就是如果网页内容变了的话(某天 html 的 id/class 变了),会发生什么。
    dionyphus
        9
    dionyphus  
       44 天前
    大佬听说过 Power Automate 吗。。。
    heartlocker
        10
    heartlocker  
    OP
       44 天前
    @dionyphus 听过,我其实在 ms 呆过一段时间。 这类图形化编辑的 RPA 产品(类似的还有 UIpath ,影刀)在使用过后,我个人觉得有一些问题。业务人员需要有一些编程的基本概念和逻辑才能学会使用,这一点其实要求不低,普通用户很难学会使用。如果用户本来已经有一些编程的基础,图形化的界面反而是累赘,嵌套,循环,条件判断,函数不如直接写代码。 如果真的用这类产品写一些稍微复杂一点的流程,图形化界面基本上很难满足需求,导致图形化界面混合零碎的代码块,难看难用难维护。 所以我个人觉得直接写 Python 可能是一种更好的方式。
    heartlocker
        11
    heartlocker  
    OP
       44 天前
    @shyling 我们在文档里面有介绍目前使用到的一些 automation 技术:
    https://www.clicknium.com/documents/concepts/web
    https://www.clicknium.com/documents/concepts/uia
    Locator 是通过 id 确认位置的。
    locator 数量多并不会让人晕,我们设计了几种方法:
    1. locator 可以重命名为你认为有意义的名字。
    2. 当鼠标悬停在代码上时,会自动展示 locator 对应的 UI 元素快照,你可以直接 open ,validate ,recpature 。
    https://s1.328888.xyz/2022/08/12/6xdZN.png
    3. 在 locator store 中,可以配置 locator 的参数,validate 你的 locator 的位置,重新 capture ,甚至支持实时的 Action 来操作 locator 对应的 UI 元素,验证 locator 的有效性。
    https://s1.328888.xyz/2022/08/12/6JNpd.png

    网页内容变了的话: 那当然 locator 就失效了哦。 毕竟如果 html 的 class 都发生变化了,界面很可能布局都变了。
    bloodspasm
        12
    bloodspasm  
       44 天前
    真棒 希望有 Mac 版本可以做点好玩的
    shyling
        13
    shyling  
       44 天前
    @heartlocker #11 这个展示很棒~
    brianinzz
        14
    brianinzz  
       44 天前
    所以底层是通过浏览器开发者工具接口?不需要安装 driver? 拿可以绕过一些 driver 特征检测的反爬?
    BunnyEatingGrass
        15
    BunnyEatingGrass  
       44 天前
    很棒呀,试了下,运行速度挺快的。
    brianinzz
        16
    brianinzz  
       44 天前
    我一直登录不进去。。。。登录成功后跳转 vscode 的链接一直启动不了 vscode 。。。
    scyuns
        17
    scyuns  
       44 天前
    看起来很不错 对于自动化 UI 测试应该不错
    lele140
        18
    lele140  
       44 天前
    先 star 了,后续需要再试用
    huntzhan
        19
    huntzhan  
       44 天前
    解开 wheel 看了一下是 C# 写的项目😄
    OP 可以分享一下之后的商业化计划吗
    heartlocker
        20
    heartlocker  
    OP
       44 天前
    @brianinzz 我们采用的是 native message 的方式。 所以理论上不会被 driver 特征检查到。https://developer.chrome.com/docs/apps/nativeMessaging/
    heartlocker
        21
    heartlocker  
    OP
       44 天前
    @brianinzz 可以加一下 slack 吗? 看看是什么问题导致的,确实有个别用户遇到了跳转打不开的问题,我们还没能复现。https://join.slack.com/t/clicknium/shared_invite/zt-1cfxsstw7-s0CeJdhyg5wQ1h7_KKc6QQ
    heartlocker
        22
    heartlocker  
    OP
       44 天前
    @lele140 感谢支持。
    heartlocker
        23
    heartlocker  
    OP
       44 天前
    @brianinzz 你用的是 Chrome 浏览器吗?如果是 打开 chrome://settings/content/popups 设置里允许发送弹出式窗口并使用重定向 加入当前网站
    heartlocker
        24
    heartlocker  
    OP
       44 天前
    @huntzhan 这个问题,我也想知道答案。目前还是希望先做一个真正有用的工具,验证我们的想法是对的。
    hubahuba
        25
    hubahuba  
       44 天前
    非常棒,希望技术导向的公司越来越多!
    allanpk716
        26
    allanpk716  
       44 天前
    后续会集成一些的图形识别功能吗?比如,某个 APP 的功能按钮样式比较特殊,希望在整个 APP 的区域内搜索定位来点击。可能类似于写外挂的某些功能。
    brianinzz
        27
    brianinzz  
       44 天前
    @heartlocker 可以了 周末有空了玩一下 感谢
    zx900930
        28
    zx900930  
       43 天前 via Android
    能跳过 recaptcha, ncaptcha, 拼图之类验证吗?
    heartlocker
        29
    heartlocker  
    OP
       43 天前
    @zx900930 人工自己操作 不能跳过的话 自动化操作也是不能跳过的。
    heartlocker
        30
    heartlocker  
    OP
       43 天前
    @allanpk716 不确定这个功能有很强的需求。 本质上是需要给 locator 一个方式定位到 UI 元素。 直接用识别理论上效率会很低。 不如直接调用 ocr 的库,自己控制,然后把对应的值用代码配置给 locator.
    kele999
        31
    kele999  
       43 天前
    很有前途
    Ne
        32
    Ne  
       42 天前 via Android
    刚好在学 python 爬虫,感谢。
    Ne
        33
    Ne  
       41 天前 via Android
    @heartlocker 如果网站是本地的 192.168.1.2 这样的网址会出错,Locator 里的 192 文件夹要改名,不然代码会说 chrome 找不到
    heartlocker
        34
    heartlocker  
    OP
       41 天前
    @Ne 因为采用的是类似 namespace 的方式,纯数字是非法的。 我们修改一下自动生成的规则吧。 多谢提醒。 下个版本会修复。
    gumuxi
        35
    gumuxi  
       41 天前
    以后应该能用到,收藏下
    heartlocker
        36
    heartlocker  
    OP
       30 天前
    图像识别的功能已加入。 按住 shit 用鼠标框选元素就可以。 欢迎试用。
    itabas016
        37
    itabas016  
       25 天前 via Android
    点赞
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4682 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 76ms · UTC 02:40 · PVG 10:40 · LAX 19:40 · JFK 22:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.