Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

你好,企业微信是AirApp 其他的都是UiaApp,有什么原因吗 #3

Closed
ttcly opened this issue May 30, 2023 · 11 comments
Closed
Labels
documentation Improvements or additions to documentation

Comments

@ttcly
Copy link

ttcly commented May 30, 2023

你好,企业微信是AirApp 其他的都是UiaApp,有什么原因吗
为什么企业微信不使用UiaApp模式

@yihleego
Copy link
Owner

Hello @ttcly,

UiaApp 适用于有 UI 组件树的应用,AirApp 是基于图像识别实现的。

使用网页类比的话,UiaApp 就像是操作 DOM 对 UI 组件进行各种操作,例如: $(".btn").click()
而 AirApp 就像是网页中只有一个 Canvas,所有 UI 都是通过代码绘制出来的。

企业微信就是类似于 Canvas 来展示各种组件,所以在不逆向客户端的情况下,只能通过图像识别去控制点击、输入等操作,显然他们这样做的主要目的是为了防止机器人。

@ttcly
Copy link
Author

ttcly commented Jun 1, 2023

好的,了解,谢谢

@yihleego
Copy link
Owner

yihleego commented Jun 1, 2023

image

判断一个应用是否支持 UIA 可以使用微软官方提供的软件 Inspect,可以从官网或者这个仓库下载:https://github.com/yihleego/Windows-Kits/tree/master/Inspect

@ttcly
Copy link
Author

ttcly commented Jun 5, 2023

image

好的,谢谢

@ttcly
Copy link
Author

ttcly commented Jun 5, 2023

企业微信基于图像识别实现的,那我如果想识别点击头像的话,有什么好的办法吗,因为头像每个人都不一样。是不是可以识别出头像上面区域和下面的区域,然后获取中间值点击。有其他好的办法吗?

@yihleego
Copy link
Owner

yihleego commented Jun 5, 2023

根据头像识别会有几个问题:

  1. 相同头像或者相似头像可能会识别不准确,导致消息发错人
  2. 企业微信客户端会缓存头像,没有及时更新导致找不到目标用户

目前没有很好的办法,建议通过企业微信的搜索框中输入用户名称查询对应的用户,相同用户名可以对其进行备注加以区分。

@yihleego yihleego reopened this Jun 5, 2023
@ttcly
Copy link
Author

ttcly commented Jun 5, 2023

P1SE){PHU)KF``)AJUP`3FF

现在企业微信最新版本UI是这样的,获取当前用户信息需要点击左上角头像。这个有什么好的建议吗

@yihleego
Copy link
Owner

yihleego commented Jun 5, 2023

我现在手头没有windows电脑,今天晚点我帮你试一下。

@ttcly
Copy link
Author

ttcly commented Jun 5, 2023

我现在手头没有windows电脑,今天晚点我帮你试一下。

非常感谢

@yihleego
Copy link
Owner

yihleego commented Jun 5, 2023

久等了,像这种情况确实没有很好的办法,可以通过定位到“消息”按钮,然后加固定的偏移量去点击头像,因为客户端的大小不会影响它们之间的距离:

image

navbar_message_btn_pos = self.exists('navbar_message_btn.png')
if not navbar_message_btn_pos:
    return None
self.click((navbar_message_btn_pos[0], navbar_message_btn_pos[1] - 100), 0.5)

如果能保证头像是准确的,则可以通过头像去获取。比如员工头像都是公司统一的,或者基本上不会更换的情况下。

@ttcly
Copy link
Author

ttcly commented Jun 6, 2023

久等了,像这种情况确实没有很好的办法,可以通过定位到“消息”按钮,然后加固定的偏移量去点击头像,因为客户端的大小不会影响它们之间的距离:

image

navbar_message_btn_pos = self.exists('navbar_message_btn.png')
if not navbar_message_btn_pos:
    return None
self.click((navbar_message_btn_pos[0], navbar_message_btn_pos[1] - 100), 0.5)

如果能保证头像是准确的,则可以通过头像去获取。比如员工头像都是公司统一的,或者基本上不会更换的情况下。

好的,感谢

@ttcly ttcly closed this as completed Jun 6, 2023
@yihleego yihleego added the documentation Improvements or additions to documentation label Jun 6, 2023
@yihleego yihleego pinned this issue Jul 11, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation
Projects
None yet
Development

No branches or pull requests

2 participants