学习目的:
学会简单的方法封装
利用打码平台过验证
熟悉相应的库
首先我们进入一个网站的注册页面

(注:该页面版权归该网站所有,对该网站的行为仅做为学习,承诺无任何恶意行为)
页面分析:
微信号:(即账号,没有字符限制,特殊符限制,没有微信验证)
密码:(没有字符长度限制)
确认密码:(要与密码要一致)
验证码输入框:4个与图片一致的字符
验证码:4个字符验证码
注册按钮:所有文本框填写完成后点击
获取微信号、密码、确认密码、验证码文本框、验证码图片、立即注册按钮的源码
![]()
![]()
![]()
![]()

![]()
通过以上源码发现,文本输入框有共同元素 class="layui_input"、type=""、name=""
那么我们可以把他们共同“点”封装成一个方法,然后在主程序中直接调用。
我选择name这个元素,因为class="layui_input"他们都有不好区分,在selenium中没有找type的方法

选name的话只需要在 driver.find_element_by_name() 括号中改成变量名就行了
验证码解决办法:
百度搜索万维易源,注册个账号,需要购买,


准备好后开始码代码:
| 用到的库 | 安装方法 |
| selenium | pip install selenium |
| Pillow | pip install Pillow |
| pytesseract | pip install pytesseract |
引入用到的模块
from selenium import webdriver # 首先引入webdriver
import time # 引入时间 后面加等待时间用
启动浏览器
driver = webdriver.Firefox() # 应为我这里用的是火狐浏览器,可根据实际情况进行修改
启动浏览器后我们是否会输入访问的地址?一般都是这样操作的哈,所以我们现在初始化浏览器
def driver_init(): # 封装一个浏览器初始化的方法
driver.get("http://www.xxxx.com/login/register.html") # 根据实际情况修改网址
time.sleep(5) # 等待5秒让网页加载完成
根据对网页的分析我们把获取文本框的路径进行封装
def get_xpathname(name): # 封装获取name的方法 定义name变量
xpathname = driver.fand_element_by_name(name)
return xpathname
为了满足较为真实的情况账号采用随机值
def get_rangeuser(): 封装获取随机值的方法
user_info= "".join(random.sample("abcdefghijklmn123456789",8)) # 随机组成8个字符随机值
return user_info
在上面获取随机值的方法中用到了random这个模块,所以我们要引入这个模块
import random
现在获取图片并利用第三方模块进行解析,读取图片对象用到Image所以要引入这个模块
from PIL import Image
def get_code_image(file_name): # 封装获取图片的方法并定义图片地址变量
driver.save_screenshot(file_name)
code_element = driver.find_element_by_id("captcha") # 找到验证码图片路径
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(file_name)
img = im.crop((left, top, right, height)) # 按照坐标对图片进行裁剪
img.save(file_name)
通过以上方法获取到图片,现在用第三方接口进行识别读取,用到第三方包 ShowapiRequest ,引入这个包
from ShowapiRequest import ShowapiRequest
解析方法,第三方提供了使用方法



def code_online(file_name): # 封装解析图片的方法
r = ShowapiRequest("http://route.showapi.com/184-4", "xxxx", "xxxxxxx")
# r.addBodyPara("img_base64", "")
r.addBodyPara("typeId", "34")
r.addBodyPara("convert_to_jpg", "0")
r.addBodyPara("needMorePrecise", "0")
r.addFilePara("image", file_name)
res = r.post()
print(res.text)
text = res.json()['showapi_res_body']['Result']
print(text)
return text
以上方法完成后编写主程序
def run_main(): # 调用封装的方法来实现注册
user_name_iofo = get_rangeuser()
file_name = "E:/Qest/test01.png"
driver_init()
get_xpathname("name").send_keys(user_name_iofo)
print(user_name_iofo)
get_xpathname("password1").send_keys("Qq123456")
get_xpathname("password").send_keys("Qq123456")
# driver.find_element_by_xpath("/html/body/div/form/div[1]/div[3]/div/input").send_keys("Qq123456")
get_code_image(file_name)
text = code_online(file_name)
get_xpathname("captcha").send_keys(text)
driver.find_element_by_xpath("/html/body/div/form/div[2]/div/button").click()
driver.close()
run_main()
run一下

完整源码下载地址(包含测试地址,请勿有恶意行为,否则后果自负):https://download.youkuaiyun.com/download/moveym/11191131
该博客主要围绕Selenium自动化测试展开。先介绍学习目的,包括方法封装、利用打码平台过验证等。接着对网站注册页面分析,将文本输入框共同元素封装成方法。验证码通过万维易源解决,还说明了代码编写过程,如引入模块、初始化浏览器等,最后给出完整源码下载地址。
935

被折叠的 条评论
为什么被折叠?



