使用PyAutoGUI和OpenCV在远程机器上元素检测的问题

0 投票
1 回答
56 浏览
提问于 2025-04-14 18:24

背景:这里提到的是两个工具,PyAutoGUI 和 OpenCV。它们的主要任务是通过精确匹配来找到当前屏幕上的某个特定元素。具体做法是先截取整个屏幕的截图,然后在这个截图中寻找一个图像(通常是矩形的,边缘清晰)。如果找到了,就会返回找到的位置坐标。

问题:在本地环境下,一切都运行得很好;代码可以正常执行,所有想要的元素都能找到。但在另一台测试机器上,这台机器上有一个 GitLab runner 来执行代码。在这台机器上,有些元素能100%找到,而有些元素无论如何都找不到,不管是大图还是小图。感觉像是找不到与应用程序中额外弹出窗口相关的元素。这个问题有点奇怪,因为截图是可以捕捉到所有这些窗口的,所以理论上应该能找到。

尝试过但没有效果的做法:在两台机器上设置相同的分辨率,把图像转换为相同的颜色空间,使用像素字体来减少干扰,尝试了几种不同的库和搜索方法——总是在同一个阶段失败。检查了库和路径变量——一切都是一样的。

那么,有什么办法可以理解这个问题,并找到解决方案呢?

1 个回答

0

其实,这个问题是通过一种比较复杂的方式解决的。问题出在被测试的程序和测试用户的设置上。关键是,这个程序的界面会根据用户屏幕的DPI(每英寸点数)进行调整,而这种调整只会在重启后第一次登录的用户身上生效。因此,界面元素的布局和字体的粗细会发生变化,虽然每个地方的变化都不大,但最终造成了很大的差异。尽管字体和屏幕分辨率是统一的。 我接手这个项目时,之前的开发者的DPI设置和我的相差了两倍。他的DPI设置保留在测试机器和测试用户的配置中。这一点不容易追踪,因为我是在自己的用户账户下使用正常设置在测试机器上,而测试是通过测试用户来运行的。 不过,@Dan Mašek的回复在某种程度上帮助我理清了思路,组织了解决方案的思路,也让我更好地拆解了这个问题,感谢他。

撰写回答