























我从某处下载的QQ2010,其它都好,就是登录时焦点在密码框时,QQ就会崩溃。解决办法是使用QQ自带的软键盘输入密码。但在这个「半字母顺序」排列软键盘上找需要的需要实在费事。作为一名 Linuxer,我自然得想办法将其自动化。
很久之前就已经看到这个Xpresser软件,但可惜的是,它在Arch下跑不起来。但我从中学到了简单的图像匹配,再加上自己对 Xtest 的了解,解决方案呼之欲出。
本来是三个月前就打算写篇文章的,因各种原因迟迟未写。现在因为各种原因再次折腾这家伙,还是写出来分享一下吧。使用OpenCV做图像匹配部分我就不写了,有兴趣的自己去看 Xpresser 或者 winterpy 中的代码。
首先,介绍一下依赖。本脚本依赖众多的东西,其中我自己写的部分在 winterpy 里有,主要是 OpenCV 图像匹配,以及之前写过的 Xtest 调用、使用 GDK 截图。最终,我利用它们写成了 xauto.py 库,功能还十分欠缺,但自动登录Wine QQ足够了,因为我做这些的主要目的就是这可恶的QQ。
#!/usr/bin/env python3
# vim:fileencoding=utf-8
import os
import sys
from xauto import XAuto, Image
QQNo = 'YourQQNo'
QQPwd = 'YourQQPassword'
def main():
if os.fork() == 0:
if os.fork() == 0:
os.execlp('rwine', 'rwine')
else:
sys.exit()
os.chdir(os.path.split(sys.argv[0])[0])
rect = (20, 150, 500, 500)
xa = XAuto()
w, h = xa.screensize
target_w, target_h = 500, 300
w, h = w - target_w, h - target_h
w, h = w // 2, h // 2
center = (w, h, target_w, target_w)
xa.default_rect = center
xa.find_and_click('ok.png', repeat=10) or sys.exit('click 确定')
xa.find_and_click('qq.png', repeat=10) or sys.exit('find qq no input')
xa.wait(1)
for k in QQNo:
xa.key(k)
xa.wait(0.4)
pwd_pos = xa.find('input_pwd.png')
xa.click(pwd_pos)
caps = Image('caps.png')
xa.wait(0.4)
for ch in QQPwd:
xa.find_and_click('%s.png' % ch) or sys.exit(2)
xa.wait(0.1)
xa.find_and_moveto(caps)
xa.wait(0.1)
xa.moveto(pwd_pos)
xa.wait(0.4)
xa.find_and_click('login.png')
if __name__ == '__main__':
main()
几点说明:
rm -rf Users/All\ Users mkdir Users/All\ Users chmod -w Users/All\ Users
另注:更简洁好用的 TM2009 没有 wine 成功,登录时弹出错误。
2014年3月25日更新:TM2009 以及 TM2013 后来均 Wine 成功了,并且在输入密码时不会崩溃。详情见此文。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。