自動登錄腳本(用戶名+密碼)


前提:創建一個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()

分析測試結果
分析測試結果

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM