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,筛选出errcode0(即登录不成功的状态)的所有数据,将登录的⽤户名和密码以及请求结果保存到新⽂件中

并且加了⼀⾏ “ 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()

# 关闭浏览器