web自动化--短信验证码登录

339 阅读3分钟

安装redis报错: image.png

解决办法: 选用稳定的pip源并且信任它的来源就可以解决这种问题

使用方法:

(例如,豆瓣)

pip install 包名 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

安装redis成功: image.png

其它镜像源:

清华镜像源pypi.tuna.tsinghua.edu.cn/simple
中国科学技术大学pypi.mirrors.ustc.edu.cn/simple
豆瓣pypi.douban.com/simple/

web自动化实现验证码登录:

image.png

思路
输入手机号码,点击“获取验证码”链接,redis数据库中存入此次验证码,需连接redis数据库,并获取到该手机号对应的验证码,取到之后将其写入到“验证码”输入框中进行登录。

此处需要先连接redis,所以需要安装redis,代码部分还是使用PO模式来实现,元素定位部分比较简单,重点关注redis数据库连接这块。

此处我走了许多弯路,没有首先了解redis数据存储情况:
1、首先找到你触发的验证码存到了哪个库,找到对应存储地点。(此处由于数据太多没有仔细查找我的数据存在哪)
2、redis是根据什么来存的 (根据什么类型的键值来存储的,不同业务的键值类型可能不同)
3、存的内容是什么 (键值下面有相应的key-value数据,需要的验证码就在这里面)
4、如何获取到对应类型的数据,(需要用到redis的命令)

查看redis数据库,找到存入redis中的数据:
类型为:hash
键值类型为:SMS_CODE:18199999993 (手机号)
image.png

# 连接redis数据库,并获取手机验证码
def get_code(self):
    #为redis数据库连接方式
    r = redis.StrictRedis(host='IP地址', port=端口, db=1, password='xxxx')
    try:
        r.ping()
        print('Redis 数据库连接成功')
        # 获取redis数据库中hash键对应的code键的值,  r.hget(hash键,hash键下面的要查询的key)
        code = r.hget('SMS_CODE:188888888', 'code').decode("utf-8")
        print(code, type(code))
        # 将<class 'str'>类型转换成int类型,直接使用int(str)方法不生效
        # 使用strip()去除数字字符串类型两侧的引号,用到strip('"')
        LoginHealthBD.yz = code.strip('"')
        print(LoginHealthBD.yz, type(LoginHealthBD.yz))
    except redis.exceptions.ConnectionError as e:
        print('Redis 数据库连接失败', e)

文章末尾附上redis命令:
key

keys * 获取所有的key
select 0 选择第一个库//redis默认是16个数据库
move myString 1 将当前的数据库key移动到某个数据库,目标库有,则不能移动
flush db      清除指定库
randomkey     随机key
type key      类型
set key1 value1 设置key
get key1    获取key
mset key1 value1 key2 value2 key3 value3
mget key1 key2 key3
del key1   删除key
exists key      判断是否存在key
expire key 10   10过期
pexpire key 1000 毫秒
persist key     删除过期时间

string

set name chao
get name
getrange name 0 1         字符串分段,得到  ch
getset name new_chao      设置值,返回旧值
mset key1 key2            批量设置值 key1 value1 key2 value2
mget key1 key2            批量获取
setnx key value           不存在就插入(not exists)
setex key time value      过期时间(expire)
setrange key index value  从index开始替换value
incr age        递增
incrby age 10   递增
decr age        递减
decrby age 10   递减
incrbyfloat     增减浮点数
append          追加
strlen          长度

hash

hset myhash name xxx
hget myhash name
hmset myhash name xxx age 25 note "i am notes"
hmget myhash name age note   可以查找多个
hgetall myhash               获取所有的键和值
hexists myhash name          查询该name是否存在
hsetnx myhash score 100      设置不存在的
hincrby myhash id 1          递增
hdel myhash name             删除
hkeys myhash                 只取key
hvals myhash                 只取value
hlen myhash                  长度