2023年11月25日发(作者:)
⾃动登录脚本(⽤户名+密码)
前提:创建⼀个text⽂件,⽤于存储⽤户名和密码,再⽤代码去调⽤⽂件
,
root,
,122
root,123
yohonormal,123456
测试⽤的⽤户名和密码
此⽂件中包含了 ⽤户名和密码都为空、密码为空、⽤户名为空、密码错误、⽤户名和密码都正确 的情况
1、打算把⽂件查看也封装成⼀个⽅法,发现没办法把登录加进去,写了⼀个半成品,还没搞好
from selenium import webdriver
from time import sleep
un = ''
pw = ''
# 打开⾕歌浏览器
browser = (r'/Users/chensihan/Downloads/chromedriver')
# 最⼤化浏览器
ze_window()
# 打开公司内部⽹站
("/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 = ().split()
# 将msg_line的第0个元素赋值给un,⽤于登录函数中输⼊⽤户名
un = msg_line[0]
# 将msg_line的第1个元素赋值给pw,⽤于登录函数中输⼊密码
pw = msg_line[1]
()
# 登录
def login():
# 通过xpath定位⽤户名输⼊框,并清空输⼊框
_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/input').clear()
# 输⼊⽤户名
_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/input').send_keys(un)
# 通过xpath定位密码输⼊框,并清空输⼊框
_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/input').clear()
# 输⼊密码
_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/input').send_keys(pw)
sleep(1)
# 登录
_element_by_class_name('_1dNJXuqS50-Y8IDzBbpxeR').click()
# 给⽹页2秒加载时间
sleep(2)
# 退出当前账户
def quit():
_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()
#
# # 截取当前页⾯
# _screenshot("/Applications/Google /")
# # 定位验证码
# yzm = _element_by_id('randImage')
#
# location = on
# size =
# rangle = (int(location['x']), int(location['y']), int(location['x']+size['width']), int(location['y']+size['height']))
#
# i = ('/Applications/Google /')
# frame4 = (rangle)
# ('/Applications/Google /')
# dym = ('/Applications/Google /')
# text = _to_string(dym)
# _element_by_name('code').send_keys(text)
# _elements_by_class_name('btn').click()
未完成的循环,可以不看
未完成的循环,可以不看
2、除⽂件外,其余都封装成了⽅法
# 通过xpath定位密码输⼊框,并清空输⼊框
_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/input').clear()
# 输⼊密码
_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/input').send_keys(pw)
sleep(1)
# 登录
_element_by_class_name('_1dNJXuqS50-Y8IDzBbpxeR').click()
# 给⽹页2秒加载时间
sleep(2)
# 退出当前账户
def quit():
_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 = ().split()
# 将msg_line的第0个元素赋值给un,⽤于登录函数中输⼊⽤户名
un = msg_line[0]
# 将msg_line的第1个元素赋值给pw,⽤于登录函数中输⼊密码
pw = msg_line[1]
# 容错处理
# 正确的执⾏登录和退出
# 关闭浏览器
()
View Code
3、上边的代码只有正确账号登录,没有兼容错误的账号,本版本加了空账号、缺失⽤户名或密码的
from selenium import webdriver
from time import sleep
un = ''
pw = ''
# 打开⾕歌浏览器
browser = (r'/Users/chensihan/Downloads/chromedriver')
# 最⼤化浏览器
ze_window()
# 打开公司内部⽹站
("/login")
# 给1秒钟去打开页⾯,没打开页⾯就去做其他操作,会报错
sleep(1)
# 登录
def login():
# 通过xpath定位⽤户名输⼊框,并清空输⼊框
_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/input').clear()
# 输⼊⽤户名
_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/input').send_keys(un)
# 通过xpath定位密码输⼊框,并清空输⼊框
_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/input').clear()
_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 = ().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
# 关闭浏览器
()
加了错误处理
加了错误处理
4、代码可执⾏了,接下来就是把测试结果保存到⽂件,测试结果,就是发送登录请求后,接⼝返回的数据,以及当前请求接⼝时使⽤的⽤
户名和密码
from selenium import webdriver
from time import sleep
import requests
import json
un = ''
pw = ''
# 打开⾕歌浏览器
browser = (r'/Users/chensihan/Downloads/chromedriver')
# 最⼤化浏览器
ze_window()
# 打开公司内部⽹站
("/login_file")
# 给1秒钟去打开页⾯,没打开页⾯就去做其他操作,会报错
sleep(1)
# 登录
def login():
# 通过xpath定位⽤户名输⼊框,并清空输⼊框
_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/input').clear()
# 输⼊⽤户名
_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/input').send_keys(un)
# 通过xpath定位密码输⼊框,并清空输⼊框
_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/input').clear()
# 输⼊密码
_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/input').send_keys(pw)
sleep(1)
# 登录
_element_by_class_name('_1dNJXuqS50-Y8IDzBbpxeR').click()
# 给⽹页2秒加载时间
sleep(2)
def request_url():
# 接⼝地址
url = '/apiauth/login/login'
# 请求头
headers = {
"Content-Type": "application/json",
}
# 请求体。因为是先执⾏的登录,所以使⽤当前登录的⽤户名和密码来请求这个接⼝
data = {
"userName": un,
"password": pw,
}
# 获取请求之后的返回信息
response = (url=url, data=(data), headers=headers)
print()
# 将获取的返回信息保存到⽂件中,并换⾏
with open('测试结果', 'a') as fp:
('⽤户名:' + un + ' ' + '密码:' + pw + ' ' + '登录结果:' + + 'n')
print('获取成功!')
# 退出当前账户
def quit():
_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 = ().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
# 关闭浏览器
()
输出测试结果并保存⽂件
输出测试结果并保存⽂件
5、分析测试结果
通过结果中的errcode,筛选出errcode⾮0(即登录不成功的状态)的所有数据,将登录的⽤户名和密码以及请求结果保存到新⽂件中
并且加了⼀⾏ “ if __name__ == '__main__': ” ,⽅便其他⽂件import此⽂件时,此⽂件内部的内容不会被执⾏
from selenium import webdriver
from time import sleep
import requests
import json
un = ''
pw = ''
# 打开⾕歌浏览器
browser = (r'/Users/chensihan/Downloads/chromedriver')
# 最⼤化浏览器
ze_window()
# 打开公司内部⽹站
("/login_file")
# 给1秒钟去打开页⾯,没打开页⾯就去做其他操作,会报错
sleep(1)
# 登录
def login():
# 通过xpath定位⽤户名输⼊框,并清空输⼊框
_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/input').clear()
# 输⼊⽤户名
_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/input').send_keys(un)
# 通过xpath定位密码输⼊框,并清空输⼊框
_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/input').clear()
# 输⼊密码
_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/input').send_keys(pw)
sleep(1)
# 登录
_element_by_class_name('_1dNJXuqS50-Y8IDzBbpxeR').click()
# 给⽹页2秒加载时间
sleep(2)
# 获取登录后登录接⼝的数据
def request_url():
# 接⼝地址
url = '/apiauth/login/login'
# 请求头
headers = {
"Content-Type": "application/json",
}
# 请求体。因为是先执⾏的登录,所以使⽤当前登录的⽤户名和密码来请求这个接⼝
data = {
"userName": un,
"password": pw,
}
# 获取请求之后的返回信息
response = (url=url, data=(data), headers=headers)
# print()
# 将获取的返回信息保存到⽂件中,并换⾏
with open('测试结果', 'a') as fp:
('⽤户名:' + un + ' ' + '密码:' + pw + ' ' + '登录结果:' + + 'n')
# print('获取成功!')
# 退出当前账户
def quit():
_element_by_class_name('_1ECz20e4Sb4cz8jt2QRoBL').click()
sleep(2)
# 分析测试结果
def test_result():
msg_dict = {}
with open('测试结果', 'r') as fp:
msg = nes()
for line in msg:
msg_line = ().split()
for i in msg_line:
i1 = ().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:
(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 = ().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()
# 关闭浏览器
发布评论