V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
heartlocker
V2EX  ›  分享创造

Clicknium 自动操作网页和应用

  •  
  •   heartlocker · 2022-08-12 12:05:15 +08:00 · 5550 次点击
    这是一个创建于 831 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    还有就是如果网页内容变了的话(某天 html 的 id/class 变了),会发生什么。
    dionyphus
        9
    dionyphus  
       2022-08-12 14:22:04 +08:00
    大佬听说过 Power Automate 吗。。。
    heartlocker
        10
    heartlocker  
    OP
       2022-08-12 14:43:47 +08:00
    @dionyphus 听过,我其实在 ms 呆过一段时间。 这类图形化编辑的 RPA 产品(类似的还有 UIpath ,影刀)在使用过后,我个人觉得有一些问题。业务人员需要有一些编程的基本概念和逻辑才能学会使用,这一点其实要求不低,普通用户很难学会使用。如果用户本来已经有一些编程的基础,图形化的界面反而是累赘,嵌套,循环,条件判断,函数不如直接写代码。 如果真的用这类产品写一些稍微复杂一点的流程,图形化界面基本上很难满足需求,导致图形化界面混合零碎的代码块,难看难用难维护。 所以我个人觉得直接写 Python 可能是一种更好的方式。
    heartlocker
        11
    heartlocker  
    OP
       2022-08-12 15:01:05 +08:00
    @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  
       2022-08-12 15:02:07 +08:00
    真棒 希望有 Mac 版本可以做点好玩的
    shyling
        13
    shyling  
       2022-08-12 15:03:30 +08:00
    @heartlocker #11 这个展示很棒~
    brianinzz
        14
    brianinzz  
       2022-08-12 15:19:27 +08:00
    所以底层是通过浏览器开发者工具接口?不需要安装 driver? 拿可以绕过一些 driver 特征检测的反爬?
    BunnyEatingGrass
        15
    BunnyEatingGrass  
       2022-08-12 15:31:47 +08:00
    很棒呀,试了下,运行速度挺快的。
    brianinzz
        16
    brianinzz  
       2022-08-12 16:37:10 +08:00
    我一直登录不进去。。。。登录成功后跳转 vscode 的链接一直启动不了 vscode 。。。
    scyuns
        17
    scyuns  
       2022-08-12 16:43:38 +08:00
    看起来很不错 对于自动化 UI 测试应该不错
    lele140
        18
    lele140  
       2022-08-12 16:52:10 +08:00
    先 star 了,后续需要再试用
    huntzhan
        19
    huntzhan  
       2022-08-12 17:01:27 +08:00
    解开 wheel 看了一下是 C# 写的项目😄
    OP 可以分享一下之后的商业化计划吗
    heartlocker
        20
    heartlocker  
    OP
       2022-08-12 17:06:50 +08:00
    @brianinzz 我们采用的是 native message 的方式。 所以理论上不会被 driver 特征检查到。https://developer.chrome.com/docs/apps/nativeMessaging/
    heartlocker
        21
    heartlocker  
    OP
       2022-08-12 17:10:18 +08:00
    @brianinzz 可以加一下 slack 吗? 看看是什么问题导致的,确实有个别用户遇到了跳转打不开的问题,我们还没能复现。https://join.slack.com/t/clicknium/shared_invite/zt-1cfxsstw7-s0CeJdhyg5wQ1h7_KKc6QQ
    heartlocker
        22
    heartlocker  
    OP
       2022-08-12 17:18:22 +08:00
    @lele140 感谢支持。
    heartlocker
        23
    heartlocker  
    OP
       2022-08-12 18:04:56 +08:00
    @brianinzz 你用的是 Chrome 浏览器吗?如果是 打开 chrome://settings/content/popups 设置里允许发送弹出式窗口并使用重定向 加入当前网站
    heartlocker
        24
    heartlocker  
    OP
       2022-08-12 18:35:39 +08:00
    @huntzhan 这个问题,我也想知道答案。目前还是希望先做一个真正有用的工具,验证我们的想法是对的。
    hubahuba
        25
    hubahuba  
       2022-08-12 21:03:36 +08:00
    非常棒,希望技术导向的公司越来越多!
    allanpk716
        26
    allanpk716  
       2022-08-13 08:37:35 +08:00
    后续会集成一些的图形识别功能吗?比如,某个 APP 的功能按钮样式比较特殊,希望在整个 APP 的区域内搜索定位来点击。可能类似于写外挂的某些功能。
    brianinzz
        27
    brianinzz  
       2022-08-13 08:53:57 +08:00
    @heartlocker 可以了 周末有空了玩一下 感谢
    zx900930
        28
    zx900930  
       2022-08-13 13:45:48 +08:00 via Android
    能跳过 recaptcha, ncaptcha, 拼图之类验证吗?
    heartlocker
        29
    heartlocker  
    OP
       2022-08-13 22:40:06 +08:00
    @zx900930 人工自己操作 不能跳过的话 自动化操作也是不能跳过的。
    heartlocker
        30
    heartlocker  
    OP
       2022-08-13 22:44:19 +08:00
    @allanpk716 不确定这个功能有很强的需求。 本质上是需要给 locator 一个方式定位到 UI 元素。 直接用识别理论上效率会很低。 不如直接调用 ocr 的库,自己控制,然后把对应的值用代码配置给 locator.
    kele999
        31
    kele999  
       2022-08-14 10:16:24 +08:00
    很有前途
    Ne
        32
    Ne  
       2022-08-15 07:23:21 +08:00 via Android
    刚好在学 python 爬虫,感谢。
    Ne
        33
    Ne  
       2022-08-15 15:51:24 +08:00 via Android
    @heartlocker 如果网站是本地的 192.168.1.2 这样的网址会出错,Locator 里的 192 文件夹要改名,不然代码会说 chrome 找不到
    heartlocker
        34
    heartlocker  
    OP
       2022-08-15 16:35:56 +08:00
    @Ne 因为采用的是类似 namespace 的方式,纯数字是非法的。 我们修改一下自动生成的规则吧。 多谢提醒。 下个版本会修复。
    gumuxi
        35
    gumuxi  
       2022-08-16 09:59:02 +08:00
    以后应该能用到,收藏下
    heartlocker
        36
    heartlocker  
    OP
       2022-08-26 13:37:28 +08:00
    图像识别的功能已加入。 按住 shit 用鼠标框选元素就可以。 欢迎试用。
    itabas016
        37
    itabas016  
       2022-08-31 12:16:17 +08:00 via Android
    点赞
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4214 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 05:32 · PVG 13:32 · LAX 21:32 · JFK 00:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.