调用Python的PyAutoGUI模块模拟登录QQ邮箱

  PyAutoGUI模块可以模拟键盘和鼠标操作,同时还支持基于图片查找屏幕中的指定内容。本文尝试模拟鼠标和键盘操作通过浏览器登录QQ邮箱。
  最初的想法是通过浏览器图标定位浏览器,然后启动浏览器,再定位到输入栏输入QQ邮箱地址后登录邮箱,这种方式主要是要能通过图片准确定位到所需点击或输入内容的位置,然后再模拟鼠标和键盘操作。但是编写程序过程中却发现,最简单的还是通过坐标定位,由于屏幕大小固定,所需点击或输入内容的位置也固定,只要预先计算坐标,直接将鼠标移动到坐标处进行处理即可。同时PyAutoGUI网站的帮助文档(参考文献1)中给出了获取当前鼠标位置的示例代码,可以轻松地获取所需的坐标位置,示例代码如下图所示:

import pyautogui, sys
print('Press Ctrl-C to quit.')
try:
    while True:
        x, y = pyautogui.position()
        positionStr = 'X: ' + str(x).rjust(4) + ' Y: ' + str(y).rjust(4)
        print(positionStr, end='')
        print('\b' * len(positionStr), end='', flush=True)
except KeyboardInterrupt:
    print('\n')

  获取到坐标后,代码写起来也比较简单,大致思路就是将鼠标移动到指定位置,模拟鼠标点击或键盘输入,但是实际执行过程中遇到了以下问题:

  • 模拟鼠标双击没有反应。这个在之前的文章中已经讨论过,主要是被360安全软件拦截了。目前有效的解决办法是将浏览器图标固定到任务栏中,然后单击任务栏中的浏览器图标启动浏览器;
  • 清除浏览器地址栏。打开浏览器后,地址栏中默认有内容,或者是空白页,或者是默认的访问地址,此时定位到地址栏输入内容的话,会将输入内容插入到默认内容中。浏览器打开时,如果地址栏有内容,默认是选中的,因此先模拟按delete键,再输入内容;
  • 浏览器默认输入法。本人浏览器中默认输入法为中文,因此在浏览器中输入QQ邮箱地址后,如果仅模拟一次回车,只是会将邮箱地址录入到地址栏,并不会跳转到QQ邮箱网站,需要模拟两次回车才能跳转;
  • 输入邮箱账号。跳转到QQ邮箱网站后,账号输入框默认显示上次登录时的账号信息,需要清空账号输入框内容后再输入账号,本文中模拟鼠标移动到输入框内,然后模拟全选键ctrl+a,再模拟delete键清空内容,这样就可以输入账号。

  由于是在常用电脑中登录QQ邮箱,登录时没有进行图片验证,输入账号和密码后,点击登录按钮就直接登进邮箱了,完整的代码如下所示:

# coding=utf-8

import pyautogui
import time

#启动浏览器
pyautogui.moveTo(345,554,2)
pyautogui.click()
time.sleep(2)

#移动到地址栏并删除地址栏选中内容
pyautogui.moveTo(456,140,2)
pyautogui.press('del')
pyautogui.click()
time.sleep(2)

#输入qq邮箱地址
pyautogui.typewrite('mail.qq.com')
pyautogui.press('enter')
pyautogui.press('enter')

#输入qq邮箱账号和密码
pyautogui.moveTo(980,220,2)
pyautogui.click()
time.sleep(1)
pyautogui.hotkey('ctrl', 'a')
pyautogui.typewrite('12345678')
time.sleep(1)
pyautogui.moveTo(980,280,1)
pyautogui.click()
time.sleep(1)
pyautogui.typewrite('XXXXXXXX')

#点击登录邮箱
pyautogui.moveTo(1127,462,1)
pyautogui.click()
time.sleep(2)

  代码比较简单,主要是因为没有图片验证就直接登进邮箱了,如果是在不常用电脑上登录的话,还需要经过2道图片验证后才能登录,由于图片验证比较复杂(一个是拼图,另一个是点字),再使用PyAutoGUI模块模拟登录就不知道行不行了。

参考文献:
[1]https://pyautogui.readthedocs.io/en/latest/

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值