用pyautogui库实现自动登录校园网
以NTU为例:
工具:Sublime Text代码编辑器、cmd控制台执行和测试程序、用于图像识别的小图标(wifi.png
、contact.png
、enter.png
、telecom.png
)、默认的浏览器(QQ浏览器)
在此之前需要提前安装opencv-python
pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install opencv-contrib-python -i https://pypi.tuna.tsinghua.edu.cn/simple
import pyautogui
from PIL import Image
import time #需要用到time()
def find_click(img):
#function:集成匹配图像和点击匹配图标
pyautogui.click(pyautogui.center(pyautogui.locateOnScreen(img,confidence=0.6)))
#虽说也不知道为啥精度调整到0.5就老是出错
'''
易于理解版
def find_click(img):
icon_position=pyautogui.locateOnScreen(img) 返回指定图片的image对象
icon_center_position=pyautogui.center() 获取图标的中心坐标位置
pyautogui.click(icon_center_position) 点击中心位置
功能:首先定位所给图标的位置,若无则返回None
若存在就再找到图标的中心位置,再click图标的中心位置
'''
#step1:点击一次电脑上的wifi图标
find_click('wifi.png')
#step2:#鼠标向上移动700px然后点击ntu的wifi图标
pyautogui.moveRel(0,-700,duration=1)
pyautogui.click()
#step3:拖动鼠标点击按钮进行连接
'''
方法一:使用一下函数直接移动鼠标,缺点是定位不能精准
pyautogui.dragRel(260,130,duration=2)#连接按钮的相对位置
time.sleep(1)
pyautogui.click()
'''
#第二种方式:直接按图标定位
find_click('contact.png')
time.sleep(8)#等待网页显示,给浏览器充足的时间反应
#step4:找到中国电信图标telecom.png
#直接定位到相关圆点,以下位置已经经过测试
pyautogui.click(981,294)
#step5:鼠标单击输入框——使用鼠标拖拽dragRel()
pyautogui.dragRel(0,145,duration=0.1)#大概下移145个px
pyautogui.click()
#注意press和click的差别 press()模拟的时键盘按键的keyDown()按下和keyUp()释放
#step6:输入账号和密码
pyautogui.typewrite('xxxxxxx',0.1)
#这一栏输入账号
#warning:第二个参数不用加duration字段,直接填参数
pyautogui.dragRel(0,50,duration=0.1)
#鼠标下滑选中密码输入框
pyautogui.click()
pyautogui.typewrite('******',0.1)#这一栏输入密码
#step4:按下登录和关闭整个网页
enter=pyautogui.center(pyautogui.locateOnScreen("enter.png"))
pyautogui.click(enter)
#关闭登录页
#事先可以通过print(pyautogui.size())返回width和heighr 获得屏幕分辨率
#比如我的是 1920x1080的,由此预估关闭按钮的大致位置
pyautogui.click(1910,10)
!!个人学习自用,个人学习自用,个人学习自用,每个人操作系统和各种登录时的定位不一样,运行结果会存在差异。
感谢各位大佬的文章,灵感来源,参考文章如下:
1.女朋友让我深夜十二点催她睡觉,我有Python我就不干
2.Python基础之pyautogui模块(详细总结鼠标键盘操作)
3.PyAutoGui图像操作(二):图像定位不稳定解决方案