python+selenium---注册页面自动输入

实现注册页面的用户信息输入及注册

先看一下注册页面

python+selenium---注册页面自动输入_第1张图片

(输入一次)实现步骤:

  1. 打开浏览器
  2. 打开注册页面并核对是否成功打开
  3. 定位邮箱地址、用户名、密码并输入用户信息
  4. 验证码定位、识别并输入
  5. 点击注册
    下面分步骤介绍:
    1、打开浏览器,对应浏览器写不同的代码
    chrome----chromeDriver.xex
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("http://www.baidu.com")

firefox----geckodriver.exe

from selenium import webdriver
driver=webdriver.Chrome()
driver=webdriver.Firefox()

IE—win10版本下是Microsoft edge-----microsoftwebdriver.exe

from selenium import webdriver
driver=webdriver.Chrome()
driver=webdriver.Edge()

2、打开注册界面并核对是否打开正确
主要是核对title标题是否与期望结果一致

#引入title包
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
driver=webdriver.Chrome()
driver.get("http://www.baidu.com")
time.sleep(5)
EC.title_contains("百度一下,你就知道")

3、定位邮箱地址、用户名、密码并输入用户信息
四种定位方法:id、name、classname、xpath。此处省略详细过程,比较简单

driver.find_element_by_id("内容").send_Keys("内容")
driver.find_element_by_name("内容").send_Keys("内容")
driver.find_element_by_class_name("内容").send_Keys("内容")
driver.find_element_by_xpath("/html/body/div[2]/div/div[2]/div[2]/div[1]/div/div[1]/div[2]/span[2]/div/input").send_keys("ZJ2012")

4、验证码定位、识别并输入
这里展示一种识别效率一般的,识别结果准确率不高
验证码定位并识别的过程:
1、图片地址
图片每刷新一次,地址会发生变化;并不能获取到正确的验证码
2、验证码识别
详细步骤:保存当前图片—>验证码图片位置、坐标去解析,识别当前验证码–>保存为文档
cmd–>安装库:pip install Pillow (图片处理的包)
导入模块:from PIL import Image

from PIL import Image
driver.save_screenshot("E:/python_text/1.png")#整个屏幕保存
code_element=driver.find_element_by_xpath("//*[@id='imgcodediv']/span[2]/div/img")  #定位验证码图片位置
print(code_element.location)   #获取验证码的位置{"x":123,"y":456}
left=code_element.location['x']   #验证码图片左上角坐标
top=code_element.location['y']
right=code_element.size['width']+left  #长
height=code_element.size['height']+top  #高
im=Image.open("E:/python_text/1.png")  #打开整屏图片
img=im.crop((left,top,right,height))   #从整屏上截取验证码图片
img.save("E:/python_text/2.png")

5、验证码识别并输入
导入包
import pytesseract
from PIL import Image

imge1=Image.open("E:/python_text/2.png")   #打开上面保存的验证码图片
text=pytesseract.image_to_string(imge1)    #验证码识别文字
print(text) 
#验证码输入
driver.find_element_by_id(“register-btn").send_keys(text)

6、点击注册

driver.find_element_by_id("register-btn").click()

大功告成!作为记录篇,写的略简
下面见整体代码:
整体代码写的是5次输入后再点击注册,如果需要多次,修改for循环函数就好

from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
import time
import pytesseract
import random
from PIL import Image
driver=webdriver.Chrome()
#浏览器初始化
def web_init(address,message):
    driver.get(address)
    print(EC.title_contains(message))
    time.sleep(2)
#获取element信息
def get_element(id,message):
    element=driver.find_element_by_id(id).send_keys(message)
    return element
#清空element信息
def dele_element(id):
    element=driver.find_element_by_id(id).clear()
    return element
#获取随机数
def get_random():
    for i in range(5):
        string=random.sample('123456789abcdefghijklmn',10)
        return ''.join(string)
#获取图片
def get_code_image(file_name):
    driver.save_screenshot(file_name)
    img=driver.find_element_by_id("getcode_num")
    print(img.location)
    left=img.location['x']
    top=img.location['y']
    right=img.size['width']+left
    height=img.size['height']+top
    im=Image.open(file_name)
    #截图保存
    imge=im.crop((left,top,right,height))
    #for i in range(5):
    imge.save(file_name)
# 解析图片,获取验证码
def yanzhengma(filename):
    #driver.find_element_by_class_name("controls row")
    #读取图片信息
    imge1=Image.open(filename)
    text=pytesseract.image_to_string(imge1)
    print(text)
    return text
def input_yanzhengma(id,text):
#定位验证码输入框输入识别的验证码
    driver.find_element_by_id(id).send_keys(text)
    time.sleep(5)
#主函数
def run_main():
    web_init("http://www.5itest.cn/register?goto=/","注册-")
    for i in range(5):
        get_element("register_email",get_random()+"@qq.com")
        get_element("register_nickname",get_random())
        get_element("register_password",get_random())
        get_code_image("E:/python_text/1.png")
        input_yanzhengma("captcha_code",yanzhengma("E:/python_text/3.png"))
        time.sleep(1)
        dele_element("register_email")
        dele_element("register_nickname")
        dele_element("register_password")
        dele_element("captcha_code")
        time.sleep(2)
    driver.find_element_by_id("register-btn").click()
    driver.close()

run_main()

你可能感兴趣的:(软件测试,python+selenium)