自动登录脚本

前提:创建一个text文件,用于存储用户名和密码,再用代码去调用文件

,
root,
,122
root,123
yohonormal,123456
测试用的用户名和密码

此文件中包含了  用户名和密码都为空、密码为空、用户名为空、密码错误、用户名和密码都正确  的情况

 

1、打算把文件查看也封装成一个方法,发现没办法把登录加进去,写了一个半成品,还没搞好

from selenium import webdriver
from time import sleep

un = ''
pw = ''


# 打开谷歌浏览器
browser = webdriver.Chrome(r'/Users/chensihan/Downloads/chromedriver')
# 最大化浏览器
browser.maximize_window()
# 打开公司内部网站
browser.get("https://testsmallsystem.yoho8.com/login")
# 给1秒钟去打开页面,没打开页面就去做其他操作,会报错
sleep(1)


# 获取文件数据
def file():
    # 将un,pw作为全部变量,在此函数中赋值后,在其他函数中可使用这个值,否则使用的是初始化的值
    global un, pw, msg_line
    # 打开文件,读取用户名
    msg = open('/Users/chensihan/Desktop/用户名和密码.txt', 'r')
    # 循环获取每行内容
    for line in msg:
        # 使用split按空格分割字符,并且用strip去除掉两边的空格,得到了一个列表msg_line,
        # msg_line的第0个元素就是文件第一行的用户名,msg_line的第1个元素就是文件第一行的密码
        msg_line = line.strip().split()
        # 将msg_line的第0个元素赋值给un,用于登录函数中输入用户名
        un = msg_line[0]
        # 将msg_line的第1个元素赋值给pw,用于登录函数中输入密码
        pw = msg_line[1]
    msg.close()


# 登录
def login():
    # 通过xpath定位用户名输入框,并清空输入框
    browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/input').clear()
    # 输入用户名
    browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/input').send_keys(un)
    
    # 通过xpath定位密码输入框,并清空输入框
    browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/input').clear()
    # 输入密码
    browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/input').send_keys(pw)
    sleep(1)
    
    # 登录
    browser.find_element_by_class_name('_1dNJXuqS50-Y8IDzBbpxeR').click()
    # 给网页2秒加载时间
    sleep(2)


# 退出当前账户
def quit():
    browser.find_element_by_class_name('_1ECz20e4Sb4cz8jt2QRoBL').click()
    sleep(2)


# file()
# login()
# quit()


def start():
    while 1:
        file()
        if msg_line != []:
            login()
            quit()
        else:
            print('执行完毕!!!')
            break


start()
















#
# # 截取当前页面
# browser.save_screenshot("/Applications/Google Chrome.app/p.png")
# # 定位验证码
# yzm = browser.find_element_by_id('randImage')
#
# location = yzm.location
# size = yzm.size
# rangle = (int(location['x']), int(location['y']), int(location['x']+size['width']), int(location['y']+size['height']))
#
# i = Image.open('/Applications/Google Chrome.app/p.png')
# frame4 = i.crop(rangle)
# frame4.save('/Applications/Google Chrome.app/frame4.png')
# dym = Image.open('/Applications/Google Chrome.app/frame4.png')
# text = pytesseract.image_to_string(dym)
# browser.find_element_by_name('code').send_keys(text)
# browser.find_elements_by_class_name('btn').click()
未完成的循环,可以不看

 

2、除文件外,其余都封装成了方法

from selenium import webdriver
from time import sleep

un = ''
pw = ''

# 打开谷歌浏览器
browser = webdriver.Chrome(r'/Users/chensihan/Downloads/chromedriver')
# 最大化浏览器
browser.maximize_window()
# 打开公司内部网站
browser.get("https://testsmallsystem.yoho8.com/login")
# 给1秒钟去打开页面,没打开页面就去做其他操作,会报错
sleep(1)


# 登录
def login():
    # 通过xpath定位用户名输入框,并清空输入框
    browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/input').clear()
    # 输入用户名
    browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/input').send_keys(un)
    
    # 通过xpath定位密码输入框,并清空输入框
    browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/input').clear()
    # 输入密码
    browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/input').send_keys(pw)
    sleep(1)
    
    # 登录
    browser.find_element_by_class_name('_1dNJXuqS50-Y8IDzBbpxeR').click()
    # 给网页2秒加载时间
    sleep(2)


# 退出当前账户
def quit():
    browser.find_element_by_class_name('_1ECz20e4Sb4cz8jt2QRoBL').click()
    sleep(2)
    
    

# 打开文件,读取用户名
msg = open('/Users/chensihan/Downloads/老男孩/selenium测试/0测试用的用户名和密码', 'r')
# 循环获取每行内容
for line in msg:
    # 使用split按空格分割字符,并且用strip去除掉两边的空格,得到了一个列表msg_line,
    # msg_line的第0个元素就是文件第一行的用户名,msg_line的第1个元素就是文件第一行的密码
    msg_line = line.strip().split()
    # 将msg_line的第0个元素赋值给un,用于登录函数中输入用户名
    un = msg_line[0]
    # 将msg_line的第1个元素赋值给pw,用于登录函数中输入密码
    pw = msg_line[1]
    # 容错处理
    # 正确的执行登录和退出
    
    
# 关闭浏览器
browser.quit()
View Code

 

3、上边的代码只有正确账号登录,没有兼容错误的账号,本版本加了空账号、缺失用户名或密码的

from selenium import webdriver
from time import sleep

un = ''
pw = ''

# 打开谷歌浏览器
browser = webdriver.Chrome(r'/Users/chensihan/Downloads/chromedriver')
# 最大化浏览器
browser.maximize_window()
# 打开公司内部网站
browser.get("https://testsmallsystem.yoho8.com/login")
# 给1秒钟去打开页面,没打开页面就去做其他操作,会报错
sleep(1)


# 登录
def login():
    # 通过xpath定位用户名输入框,并清空输入框
    browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/input').clear()
    # 输入用户名
    browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/input').send_keys(un)
    
    # 通过xpath定位密码输入框,并清空输入框
    browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/input').clear()
    # 输入密码
    browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/input').send_keys(pw)
    sleep(1)
    
    # 登录
    browser.find_element_by_class_name('_1dNJXuqS50-Y8IDzBbpxeR').click()
    # 给网页2秒加载时间
    sleep(2)


# 退出当前账户
def quit():
    browser.find_element_by_class_name('_1ECz20e4Sb4cz8jt2QRoBL').click()
    sleep(2)


# 打开文件,读取用户名
msg = open('/Users/chensihan/Downloads/老男孩/selenium测试/0测试用的用户名和密码', 'r')
# 循环获取每行内容
for line in msg:
    # 使用split按空格分割字符,并且用strip去除掉两边的空格,得到了一个列表msg_line,
    # msg_line的第0个元素就是文件第一行的用户名,msg_line的第1个元素就是文件第一行的密码
    msg_line = line.strip().split(',')
    # 判断是否输入为空,如果获取当前行的元素为0个
    if len(msg_line) == 0:
        un = ''
        pw = ''
    else:
        # 将msg_line的第0个元素赋值给un,用于登录函数中输入用户名
        un = msg_line[0]
        # 将msg_line的第1个元素赋值给pw,用于登录函数中输入密码
        pw = msg_line[1]
    # 容错处理
    # 正确的执行登录和退出
    try:
        login()
        quit()
    # 错误的跳出当前循环
    except:
        continue
    
    
# 关闭浏览器
browser.quit()
加了错误处理

 

4、代码可执行了,接下来就是把测试结果保存到文件,测试结果,就是发送登录请求后,接口返回的数据,以及当前请求接口时使用的用户名和密码

from selenium import webdriver
from time import sleep
import requests
import json

un = ''
pw = ''

# 打开谷歌浏览器
browser = webdriver.Chrome(r'/Users/chensihan/Downloads/chromedriver')
# 最大化浏览器
browser.maximize_window()
# 打开公司内部网站
browser.get("https://testsmallsystem.yoho8.com/login_file")
# 给1秒钟去打开页面,没打开页面就去做其他操作,会报错
sleep(1)


# 登录
def login():
    # 通过xpath定位用户名输入框,并清空输入框
    browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/input').clear()
    # 输入用户名
    browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/input').send_keys(un)
    
    # 通过xpath定位密码输入框,并清空输入框
    browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/input').clear()
    # 输入密码
    browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/input').send_keys(pw)
    sleep(1)
    
    # 登录
    browser.find_element_by_class_name('_1dNJXuqS50-Y8IDzBbpxeR').click()
    # 给网页2秒加载时间
    sleep(2)


# 获取登录后登录接口的数据
def request_url():
    # 接口地址
    url = 'https://testm.yoho8.com/apiauth/login/login'
    # 请求头
    headers = {
        "Content-Type": "application/json",
    }
    # 请求体。因为是先执行的登录,所以使用当前登录的用户名和密码来请求这个接口
    data = {
        "userName": un,
        "password": pw,
    }
    # 获取请求之后的返回信息
    response = requests.post(url=url, data=json.dumps(data), headers=headers)
    print(response.text)
    # 将获取的返回信息保存到文件中,并换行
    with open('测试结果', 'a') as fp:
        fp.write('用户名:' + un + '   ' + '密码:' + pw + '   ' + '登录结果:' + response.text + '\n')
        print('获取成功!')


# 退出当前账户
def quit():
    browser.find_element_by_class_name('_1ECz20e4Sb4cz8jt2QRoBL').click()
    sleep(2)


# 打开文件,读取用户名
msg = open('/Users/chensihan/Downloads/老男孩/selenium测试/login_file/0测试用的用户名和密码', 'r')
# 循环获取每行内容
for line in msg:
    # 使用split按空格分割字符,并且用strip去除掉两边的空格,得到了一个列表msg_line,
    # msg_line的第0个元素就是文件第一行的用户名,msg_line的第1个元素就是文件第一行的密码
    msg_line = line.strip().split(',')
    # 判断是否输入为空,如果获取当前行的元素为0个,则用户名和密码都为空
    if len(msg_line) == 0:
        un = ''
        pw = ''
    else:
        # 将msg_line的第0个元素赋值给un,用于登录函数中输入用户名
        un = msg_line[0]
        # 将msg_line的第1个元素赋值给pw,用于登录函数中输入密码
        pw = msg_line[1]
    # 容错处理
    # 正确的执行登录和退出
    try:
        login()
        request_url()
        quit()
    # 错误的跳出当前循环
    except:
        continue

# 关闭浏览器
browser.quit()
输出测试结果并保存文件

 

5、分析测试结果

通过结果中的errcode,筛选出errcode非0(即登录不成功的状态)的所有数据,将登录的用户名和密码以及请求结果保存到新文件中

并且加了一行 “ if __name__ == '__main__': ” ,方便其他文件import此文件时,此文件内部的内容不会被执行

from selenium import webdriver
from time import sleep
import requests
import json

un = ''
pw = ''

# 打开谷歌浏览器
browser = webdriver.Chrome(r'/Users/chensihan/Downloads/chromedriver')
# 最大化浏览器
browser.maximize_window()
# 打开公司内部网站
browser.get("https://testsmallsystem.yoho8.com/login_file")
# 给1秒钟去打开页面,没打开页面就去做其他操作,会报错
sleep(1)


# 登录
def login():
    # 通过xpath定位用户名输入框,并清空输入框
    browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/input').clear()
    # 输入用户名
    browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/input').send_keys(un)
    
    # 通过xpath定位密码输入框,并清空输入框
    browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/input').clear()
    # 输入密码
    browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/input').send_keys(pw)
    sleep(1)
    
    # 登录
    browser.find_element_by_class_name('_1dNJXuqS50-Y8IDzBbpxeR').click()
    # 给网页2秒加载时间
    sleep(2)


# 获取登录后登录接口的数据
def request_url():
    # 接口地址
    url = 'https://testm.yoho8.com/apiauth/login/login'
    # 请求头
    headers = {
        "Content-Type": "application/json",
    }
    # 请求体。因为是先执行的登录,所以使用当前登录的用户名和密码来请求这个接口
    data = {
        "userName": un,
        "password": pw,
    }
    # 获取请求之后的返回信息
    response = requests.post(url=url, data=json.dumps(data), headers=headers)
    # print(response.text)
    # 将获取的返回信息保存到文件中,并换行
    with open('测试结果', 'a') as fp:
        fp.write('用户名:' + un + '   ' + '密码:' + pw + '   ' + '登录结果:' + response.text + '\n')
        # print('获取成功!')


# 退出当前账户
def quit():
    browser.find_element_by_class_name('_1ECz20e4Sb4cz8jt2QRoBL').click()
    sleep(2)


# 分析测试结果
def test_result():
    msg_dict = {}
    with open('测试结果', 'r') as fp:
        msg = fp.readlines()
        for line in msg:
            msg_line = line.strip().split()
            for i in msg_line:
                i1 = i.strip().split(',', 0)
                for i in i1:
                    i2 = i1[0].split(':', 1)
                    msg_dict[i2[0]] = i2[1]
            msg_dict['登录结果'] = eval(msg_dict['登录结果'])
            if msg_dict['登录结果']['errCode'] != 0:
                with open('测试结果分析', 'a') as fp1:
                    fp1.write(str(msg_dict) + '\n')
        print('分析完毕!')


# 只在本文件中执行,被import的时候,不会执行整个程序
if __name__ == '__main__':
    # 打开文件,读取用户名
    msg = open('/Users/chensihan/Downloads/老男孩/selenium测试/login_file/0测试用的用户名和密码', 'r')
    # 循环获取每行内容
    for line in msg:
        # 使用split按空格分割字符,并且用strip去除掉两边的空格,得到了一个列表msg_line,
        # msg_line的第0个元素就是文件第一行的用户名,msg_line的第1个元素就是文件第一行的密码
        msg_line = line.strip().split(',')
        # 判断是否输入为空,如果获取当前行的元素为0个,则用户名和密码都为空
        if len(msg_line) == 0:
            un = ''
            pw = ''
        else:
            # 将msg_line的第0个元素赋值给un,用于登录函数中输入用户名
            un = msg_line[0]
            # 将msg_line的第1个元素赋值给pw,用于登录函数中输入密码
            pw = msg_line[1]
        # 容错处理
        # 正确的执行登录和退出
        try:
            login()
            request_url()
            quit()
        # 错误的跳出当前循环
        except:
            continue
    
    test_result()
    # 关闭浏览器
    browser.quit()
分析测试结果

 

转载于:https://www.cnblogs.com/caoyinshan/p/11227259.html

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值