1. 程式人生 > 其它 >selenium(6):驗證碼操作1

selenium(6):驗證碼操作1

前言

再自動化測試裡碰到驗證碼怎麼處理呢

方案

  1.去掉驗證碼(最簡單,讓開發把驗證碼的程式碼註釋掉)
  2.設定萬能驗證碼(和開發溝通設定一個萬能驗證碼)
  3.驗證碼識別技術(本文講解)
  4.記錄cookies,通過向瀏覽器中新增cookie 可以繞過登入的驗證碼,通過add_cookie()方法將使用者名稱密碼寫入瀏覽器cookie ,再次訪問系統登入連結將自動登入

舉例(去哪網的註冊介面)

介面截圖

程式碼

from PIL import Image
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
import time,random
wb=webdriver.Chrome()
wb.get('https://user.qunar.com/sensitive/forgotpwd.jsp')
wb.maximize_window()
# 找到賬戶名元素
inputName=wb.find_element_by_css_selector('input[class="textbox"]')
# 斷言元素預設文字=="請輸入手機號/郵箱/使用者名稱"
assert inputName.get_attribute('placeholder')=="請輸入手機號/郵箱/使用者名稱"
print(inputName.get_attribute('placeholder'))

# 隨機生成賬號名稱注意使用.join裡面的元素需要是str型別
listNum=["1","2","3","4","5","6","7","8","9"]
loginName="".join(random.sample(listNum,5))+'@qq.com'
# 賬戶名元素輸入隨機生成賬號名稱
inputName.send_keys(loginName)
# 擷取頁面放到指定資料夾
wb.save_screenshot(r'C:\Users\QDM\Desktop\驗證碼\01.png')
# 獲取驗證碼元素
img=wb.find_element_by_xpath("//div/div/img[@class='vcodeimg']")
# 獲取元素的左頂點
left_lcoation=img.location.get("x")
top_location=img.location.get('y')
# 獲取元素的size
height_location=img.size.get('height')+top_location
width_location=img.size.get('width')+left_lcoation
print(height_location,width_location)
# 使用Image庫開啟擷取頁面(from PIL import Image)要用這個庫
im=Image.open(r'C:\Users\QDM\Desktop\驗證碼\01.png')
# 擷取驗證碼按x,y,width,height擷取
img2=im.crop((left_lcoation,top_location,width_location,height_location))
# 擷取到的檔案儲存
img2.save(r'C:\Users\QDM\Desktop\驗證碼\02.png')
im.close
# quit和close的本質區別
wb.quit()