首页 > 其他分享 >一、将整个注册流程脚本进行模块化-19

一、将整个注册流程脚本进行模块化-19

时间:2022-10-14 14:22:38浏览次数:52  
标签:name get 19 模块化 流程 driver element user self

1、D:\imooc\selenium\register_function.py

# 功能:在register_code.py的基础上,进行二次改造。

# 编码格式
#coding=utf-8

# 添加当前项目路径
import sys
sys.path.append('D:/imooc/selenium')

# 浏览器驱动包
from selenium import webdriver

# 时间包
import time

# 引入随机数生成包
import random

# 使用pip库进行图片解析包/取图片的包
from PIL import Image

# 获取api解析图片包
from ShowapiRequest import ShowapiRequest

# 导入FindElement
from find_element import FindElement

class RegisterFunction(object):

    # 将get_driver()中的driver,放入__init__构造函数中。
    def __init__(self,url):
        # get_driver的时候,需要将url放进去。
        self.driver = self.get_driver(url)

    # 获取driver并打开url
    def get_driver(self,url):
        # Chrome浏览器的驱动
        # driver的实例化
        # driver = webdriver.Edge()
        driver = webdriver.Chrome()
        # driver = webdriver.Firefox()
        # 加载指定url界面
        driver.get(url)
        # 最大化窗口
        driver.maximize_window()
        # 返回driver
        return driver
    
    # 输入用户信息
    def send_user_info(self,key,data):
        self.get_user_element(key).send_keys(data)

    # 定位元素位置,获取element元素值
    def get_user_element(self,key):
        # 调用findelement.py
        find_element = FindElement(self.driver)
        user_element = find_element.get_element(key)
        return user_element

    # 获取随机数
    def get_range_user(self):
        user_info = ''.join(random.sample('1234567890abcdefghijklmn',8))
        return user_info

    # 获取图片
    def get_code_image(self,file_name):
        # 保存整个页面的图片
        # 增加self
        self.driver.save_screenshot(file_name)
        # 通过获取验证码的id,计算code_element的元素,通过get_user_element
        code_element = self.get_user_element("code_image")
        # 通过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(self,file_name):
        self.get_code_image(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']['Result']
        # 返回验证码
        return text

    # 设置value值
    def main(self):
        user_name = self.get_range_user()
        user_email = user_name + "@163.com"
        file_name = "D:/imooc/test01.png"
        code_text = self.code_online(file_name)
        self.send_user_info('user_email',user_email)
        self.send_user_info('user_name',user_name)
        self.send_user_info('user_password',"111111")
        self.send_user_info('code_text',"11111")
        self.get_user_element('register_button').click()
        time.sleep(5)
        self.driver.close()

if __name__ == '__main__':
    register_funtion = RegisterFunction('http://www.5itest.cn/register')
    register_funtion.main()

 

2、D:\imooc\selenium\config\LocalElement.ini

# 功能:配置文件夹config中的配置文件LocalElement.ini

# 节点名称
[RegisterElement]

# Element id_name and id_value
user_email=id>register_email
user_name=id>register_nickname
user_password=id>register_password
code_image=id>getcode_num
code_text=id>captcha_code
register_button=id>register-btn

 

3、D:\imooc\selenium\util\read_ini.py

# 功能:进行逻辑处理,读取配置文件

# 编码
# coding=utf-8

# 引入读取配置文件的第三方扩展包
import configparser

# class类 
# 将代码按照一定格式封装起来
# class类_name:ReadIni,继承于object
class ReadIni(object):
        
    # 构造函数,获取load_ini函数中的cf对象。
    # 只要运行程序,就要有cf对象。
    def __init__(self,file_name=None,node=None):
        # file_name为非必须传递
        if file_name == None:
            # 设置默认配置文件
            file_name = "D:/imooc/selenium/config/LocalElement.ini"
        # node为非必须传递
        if node == None:
            # 设置默认配置文件的结点名
            self.node = "RegisterElement"
        else:
            self.node = node
        # 获取load_ini函数中的cf对象
        self.cf = self.load_ini(file_name)
    
    # 加载配置文件的函数
    def load_ini(self,file_name):
        # 调用configparser下的ConfigParser,并将调用的内容,设置为cf对象
        cf = configparser.ConfigParser()
        # 读取配置文件file_name,形参传递进来
        cf.read(file_name,encoding="utf-8-sig")
        # 将cf对象返回出去
        return cf
        
    # 获取配置文件中结点值的函数
    def get_value(self,key):
        data = self.cf.get(self.node,key)
        return data

# 主函数运行     
#if __name__ == '__main__':
    # ReadIni()对象实例化为read_init
#    read_init = ReadIni()
    # 输出结果,将user_name传递到get_value中的key
#   print(read_init.get_value("user_email"))

 

4、D:\imooc\selenium\find_element.py

# 功能:进行逻辑处理,获取配置文件中的元素值

# 编码格式
#coding=utf-8

# 导入util包的读取配置文件代码中的类
from util.read_ini import ReadIni

# 封装class
class FindElement(object):

    # 以构造函数方式传入driver(因为要用,所以必须传)
    def __init__(self,driver):
        self.driver = driver

    # 获取元素值的函数
    def get_element(self,key):

        # 实例化对象
        read_ini = ReadIni()

        # 获取实例化对象指向的值
        data = read_ini.get_value(key)

        # 拆分上述的值,取真正有用的值
        by = data.split('>')[0]
        value = data.split('>')[1]

        # 加容错处理
        try:
            if by == 'id':
                return self.driver.find_element_by_id(value)
            elif by == 'name':
                return self.driver.find_element_by_name(value)
            elif by == 'className':
                return self.driver.find_element_by_class_name(value)
            else:
                return self.driver.find_element_by_xpath(value)
        except:
            return None

 

5、D:\imooc\selenium\ShowapiRequest.py

import requests
from urllib import parse
#全局请求头
files = {}
headers = {}
body = {}
timeouts = {}
resHeader = {}

class ShowapiRequest:
    def __init__(self, url, my_appId, my_appSecret):
        self.url = url
        self.my_appId = my_appId
        self.my_appSecret = my_appSecret
        body["showapi_appid"] = my_appId
        body["showapi_sign"] = my_appSecret
        headers["User-Agent"] = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2427.7 Safari/537.36"

    def addFilePara(self, key, value_url):
        files[key] = open(r"%s" % (value_url), 'rb')
        return self

    def addHeadPara(self, key, value):
        headers[key] = value
        return self

    def addBodyPara(self, key, value):
        body[key] = value
        return self
    #设置连接时间和读取时间
    def setTimeout(self, connecttimout, readtimeout):
        timeouts["connecttimout"] = connecttimout
        timeouts["readtimeout"] = readtimeout
        return self


    def get(self):
        get_url = self.url + "?" + parse.urlencode(body)
        if not timeouts:
            res = requests.get(get_url, headers=headers)
        else:
            timeout = (timeouts["connecttimout"], timeouts["readtimeout"])
            res = requests.get(get_url, headers=headers, timeout=timeouts)
        return res

    def post(self):
        if not timeouts:
            res = requests.post(self.url, files=files, data=body, headers=headers)
        else:
            timeout = (timeouts["connecttimout"], timeouts["readtimeout"])
            res = requests.post(self.url, files=files, data=body, headers=headers, timeout=timeout)
        return res

 

标签:name,get,19,模块化,流程,driver,element,user,self
From: https://www.cnblogs.com/jieqiong1755/p/16791468.html

相关文章

  • CVPR2022论文速递(2022.4.19)!共19篇!
    整理:AI算法与图像处理CVPR2022论文和代码整理:https://github.com/DWCTOD/CVPR2022-Papers-with-Code-Demo欢迎关注公众号AI算法与图像处理,获取更多干货:​大家好,  最近正......
  • Apache Tomcat文件包含漏洞(CVE-2020-1938)复现
    漏洞描述:ApacheTomcat是美国阿帕奇(Apache)软件基金会的一款轻量级Web应用服务器。该程序实现了对Servlet和JavaServerPage(JSP)的支持。TomcatAJP协议由于存在实现缺陷导......
  • Java学习之路:流程控制
    2022-10-1110:58:41......
  • CF1195E OpenStreetMap
    题目传送门思路单调队列板子。设\(b_{i,j}\)表示第\(i\)行,区间为\(j\)到\(j+y-1\)的最小值,不难发现这个可以用单调队列\(O(nm)\)预处理出来。接下来我们的问......
  • OneNote 2019 右键菜单卡顿
    1.在Windows10中的右下角,右键点击`输入法`(即点击`中`或`英`的图标)2.选择`设置`3.选择`常规`4.界面滑到最下面,开启`使用以前的微软拼音输入法` 问题解决,On......
  • Python爬虫之scrapy_redis概念作用和流程
    scrapy_redis概念作用和流程学习目标了解分布式的概念及特点了解scarpy_redis的概念了解scrapy_redis的作用了解scrapy_redis的工作流程在前面scrapy框架中我们已经能够......
  • 流程引擎的架构设计
    1什么是流程引擎流程引擎是一个底层支撑平台,是为提供流程处理而开发设计的。流程引擎和流程应用,以及应用程序的关系如下图所示。常见的支撑场景有:Workflow、BPM、流程......
  • git-flow 的工作流程指令
    git-flow的工作流程当在团队开发中使用版本控制系统时,商定一个统一的工作流程是至关重要的。Git的确可以在各个方面做很多事情,然而,如果在你的团队中还没有能形成一个特......
  • SpringMVC执行流程
    ​ /**作者:呆萌老师*☑csdn认证讲师*☑51cto高级讲师*☑腾讯课堂认证讲师*☑网易云课堂认证讲师*☑华为开发者学堂认证讲师*☑爱奇艺千人名师计划成员*在这里......
  • 1961: 硬币组合
      这道题目是一道经典的DP:讲一下思路:f[i]:指i元可以用最少多少张钞票凑齐,凑不齐的话值为-1先将f数组初始化为无穷大(因为后面有min操作所以不能用-1)输入的同时将f[a......