# 编码
# coding=utf-8
# 浏览器驱动包
from selenium import webdriver
# 时间包
import time
# 引入随机数生成包
import random
# 使用pip库进行图片解析包/取图片的包
from PIL import Image
# 获取api解析图片包
from ShowapiRequest import ShowapiRequest
# Chrome浏览器的驱动
# driver的实例化
driver = webdriver.Chrome()
# 浏览器的初始化
def driver_init():
# 加载指定url界面
driver.get("http://www.5itest.cn/register")
# 最大化窗口
driver.maximize_window()
time.sleep(5)
# 传元素的id
def get_element(id):
element = driver.find_element_by_id(id)
return element
# 获取随机数
def get_range_user():
user_info = ''.join(random.sample('1234567890abcdefghijklmn',8))
return user_info
# 获取图片
def get_code_image(file_name):
# 保存整个页面的图片
driver.save_screenshot(file_name)
# 通过获取验证码的id,计算code_element的元素
code_element = driver.find_element_by_id("getcode_num")
# 通过code_element的元素,计算code_element元素的坐标
# 获取的格式是:{"x":123,"y":345}
# print(code_element.location)
# 左边点的坐标
left = code_element.location['x']*1.75
top = code_element.location['y']*1.75
# 右边点的坐标
right = code_element.size['width']*1.75+left
height = code_element.size['height']*1.75+top
# 打开一张图片,并命名为一个对象
im = Image.open(file_name)
# 按照一个坐标进行裁剪
img = im.crop((left,top,right,height))
# 保存裁剪后的图片
img.save(file_name)
# 解析图片,获取验证码
def code_online(file_name):
# 这里的api不变
# 需要缴费
# 修改my_appId = 1182042
# 修改my_appSecret = 523bfa72c8f64177b7a17f7a2f02c462
# https://www.showapi.com/apiGateway/view/184?tab=1
r = ShowapiRequest("http://route.showapi.com/184-1","1182042","523bfa72c8f64177b7a17f7a2f02c462" )
# 图片存放地址
r.addFilePara("image", file_name)
# 代表识别几位数的图片,即多少位数的字。
r.addBodyPara("typeId", "35")
# r.addBodyPara("convert_to_jpg", "0")
res = r.post()
text = res.json()
# ['showapi_res_error']['err']
# 返回验证码
return text
# 运行主程序
def run_main():
user_name = get_range_user()
user_email = user_name + "@163.com"
file_name = "D:/imooc/test01.png"
# 浏览器的初始化
driver_init()
# 加载邮箱地址
get_element("register_email").send_keys(user_email)
# 加载用户名
get_element("register_nickname").send_keys(user_name)
# 加载密码
get_element("register_password").send_keys("111111")
# 获取图片
get_code_image(file_name)
# 解析图片
text = code_online(file_name)
get_element("captcha_code").send_keys(text)
get_element("register-btn").click()
time.sleep(5)
driver.close()
run_main()
Windows PowerShell
版权所有 (C) Microsoft Corporation。保留所有权利。
尝试新的跨平台 PowerShell https://aka.ms/pscore6
PS D:\imooc\selenium> python .\register_code.py