selenium(6):验证码操作

前言

再自动化测试里碰到验证码怎么处理呢

方案

  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()

接着调用第三方接口读取图片来获得文件内容

posted @ 2021-10-18 18:02  Tester-**  阅读(475)  评论(0编辑  收藏  举报