专栏首页算法与数据之美换个姿势「模拟登录」

换个姿势「模拟登录」

今天老肥给大家介绍Python一个非常有意思的库PyUserInput,它集成了PyMouse和PyKeyboard这俩模块,能够模拟鼠标和键盘的操作,可以说是轻量级的按键精灵。

我们可以用这个库来进行一些机械的重复操作,也可以作为小游戏的脚本。俗话说得好,工欲善其事,必先利其器,我们需要先将PyUserInput安装。

模块安装

不同的操作系统需要安装不同的依赖:

  • Linux - Xlib
  • Mac - Quartz,AppKit
  • Windows - pywin32,pyHook

在Windows系统中,pywin32是已经默认安装的,我们仅需要安装pyHook,pyHook下载链接「阅读原文」直达。

在此页面下载与自己电脑相匹配的版本,并进入该whl文件所在位置,输入命令即可成功安装。

pip install xxxxxx.whl

安装完依赖之后,我们只要在命令行输入如下命令即可大功告成。

pip install PyUserinput

简单使用

首先,导入pymouse和pykeyboard库,并创建鼠标以及键盘对象。

from pymouse import PyMouse
from pykeyboard import PyKeyboard

m = PyMouse()
k = PyKeyboard()
  • 鼠标
x_dim, y_dim = m.screen_size()
# 获取屏幕尺寸
m.move(100, 100)
# 移动鼠标到某坐标,该坐标以左上角为(0,0)
m.click(100, 100, 1, 1)
# 在(100, 100)的位置单击左键一次

在click方法中,前两个参数为位置的坐标,第三个参数为按键选项,1表示鼠标左键,2表示右键,而最后一个参数表示点击的次数。

  • 键盘
k.type_string("Laofei NB!")   #输入字符串
k.press_key("S")              #按下S键
k.release_key("S")            #松开S键
k.tap_key("S")                #点击S键

另外还可以有组合按键,比如最常用的复制Ctrl+C。我们先按下Ctrl键,再点击C键,最后释放Ctrl键,一气呵成,完成这人生中最幸福的操作之一:复制。

k.press_key(k.control_key)
k.tap_key('c')
k.release_key(k.control_key)

模拟登录

在完成前面的基础学习之后,我们来实战一下用Python模拟鼠标键盘的操作。以前都用Selenium,今天就换个姿势来模拟登录~

这个思路应该是非常清晰的,先用鼠标实现定位,键盘输入邮箱账号以及密码,接着利用鼠标拖动滑块至底部,最后再点击登录按钮实现登录。

# 输入邮箱账号以及密码
m.move(590,370)
m.click(590,370,1,1)
k.type_string('laofei@520.com')
time.sleep(1)
m.move(590,440)
m.click(590,440,1,1)
k.type_string('memeda')
time.sleep(1)
# 拖动滑块
m.move(590,510)
m.press(590,510,1)
time.sleep(1)
m.move(1000,500)
time.sleep(2)
# 点击登录按钮
m.click(590,600)

整个登录过程行云流水,有下图为证。

本文分享自微信公众号 - 算法与数据之美(algo_and_data),作者:老肥

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 什么是AlexNet?

    对于CNN(卷积神经网络)最早可以追溯到1986年BP算法的提出,然后1989年LeCun将其用到多层神经网络中,直到1998年LeCun提出Le...

    老肥码码码
  • 快乐游戏,解放双手

    上回说到这个PyUserInput这个库能够模拟鼠标和键盘点击(没看过的朋友底部有传送门),今天老肥再来实战一波游戏脚本制作。

    老肥码码码
  • 像20200202这种完全对称的公历日期,真的是千年一遇吗

    但实际上,这传说中的千年对称日其实并非千年一遇,我运用简单的Python编程计算了未来千年内的所有对称日。

    老肥码码码
  • BGP community属性3

    这里最合适的community属性应该是:no_advertise 因为它不会向任何EBGP IBGP邻居公布路由。

    py3study
  • android 防止反编译的若干方法

    第一种方式:混淆策略 混淆策略是每个应用必须增加的一种防护策略,同时他不仅是为了防护,也是为了减小应用安装包的大小,所以他是每个应用发版之前必须要添加的一项...

    xiangzhihong
  • Vue中computed分析

    在Vue中computed是计算属性,其会根据所依赖的数据动态显示新的计算结果,虽然使用{{}}模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的,在模...

    WindrunnerMax
  • Python 缩进问题-inconsistent use of tabs and spaces in indentation.原因及解决方法

    TabError: inconsistent use of tabs and spaces in indentation 这个问题是说用了制表符做了pytho...

    小蓝枣
  • 机器学习之线性回归(1)

    在开始理解回归分析之前,先有个二手房房价的例子,假设这里的房价只和面积,居室情况两个因素有关,那么我们就有下列的数据形式 面积 居室 房价[万] 80 2 10...

    breezedancer
  • 哈密顿行动(计算机安全游戏)

    mathor
  • 编译器LLVM3.8发布

    LLVM编译器发布3.8版本了,主要是对以前版本各项性能的优化,以及对之前版本的升级。最新的发布日志可以查看这里。 这次发布的主要变化有: 这次版本要求...

    CSDN技术头条

扫码关注云+社区

领取腾讯云代金券