python与selenium自动化基础-xlrd读取数据,Excel生成报告

摘要:
代码如下:from selenium importwebdriver from selenium。webdriver.common.action_chainsimportActionChainsimporttimefromlog_moduleimportXlloginfofromuserdataimportget_webinfo,XlUserInfodefopenBrowser():webdriver_ha

代码如下:

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
from log_module import Xlloginfo
from userdata import get_webinfo,XlUserInfo
def openBrower():
    webdriver_handle = webdriver.Firefox()
    return webdriver_handle
def openUrl(handle,url):
    handle.get(url)
def findElement(d,arg):
    ele_login = d.find_element_by_link_text(arg['login_text'])
    ele_login.click()
    time.sleep(5)
    userEle = d.find_element_by_name(arg['userid'])
    pwdEle = d.find_element_by_name(arg['pwdid'])
    loginEle = d.find_element_by_css_selector('input[type="button"]')
    return userEle,pwdEle,loginEle
def sendVals(eletuple,arg):
    listkey = ['uname','pwd']
    i = 0
    for key in listkey:
        eletuple[i].clear()
        eletuple[i].send_keys(arg[key])
        i+=1
    eletuple[2].click()
def checkResult(d,xpath1,arg,log):
    result = False
    try:
        err = d.find_element_by_xpath(xpath1)
        print("Account and Pwd Error!")
        log.log_write(arg['uname'],arg['pwd'],'Error',err.text)
    except:
        print("Account and Pwd Right!")
        log.log_write(arg['uname'],arg['pwd'],'Pass')
        result = True
    return result
def logout(d,ele_dict):
    time.sleep(5)
    ele = d.find_element_by_id(ele_dict['usermenu'])
    ActionChains(d).move_to_element(ele).perform()
    time.sleep(5)
    d.find_element_by_link_text(ele_dict['logout']).click()
def login_test(ele_dict,user_list):
    d = openBrower()
    log = Xlloginfo()
    log.log_init('log','uname','pwd','result','msg')
    openUrl(d,ele_dict['url'])
    ele_tuple = findElement(d,ele_dict)
    for arg in user_list:
        sendVals(ele_tuple, arg)
        time.sleep(10)
        result = checkResult(d,ele_dict['errorid'],arg,log)
        if result:
            logout(d,ele_dict)
            time.sleep(3)
            ele_tuple = findElement(d,ele_dict)
        time.sleep(10)
    log.log_close()
# 当.py文件被直接运行时,if __name__ == '__main__'之下的代码块将被运行;当.py文件以模块形式被导入时,if __name__ == '__main__'之下的代码块不被运行
if __name__ == '__main__':
    ele_dict = get_webinfo(r'G:yayapycharmwebinfo')
    xlinfo = XlUserInfo(r'G:yayapycharmuserinfo.xlsx')
    user_list = xlinfo.get_sheetinfo_by_name('Sheet1')
    login_test(ele_dict,user_list)

webinfo

url = https://www.imooc.com/
login_text = 登录
userid = email
pwdid = password
errorid=/html/body/div[9]/div[2]/div/form/div[1]/p
usermenu=header-avator
logout=安全退出

userinfo.xlsx

python与selenium自动化基础-xlrd读取数据,Excel生成报告第1张

 userdata.py

import xlrd
def get_webinfo(path):
    web_info = {}
    config = open(path,encoding='UTF-8')
    for line in config:
        result = [ele.strip() for ele in line.split('=')]
        web_info.update(dict([result]))
    return web_info
class XlUserInfo(object):
    def __init__(self,path=''):
        self.xl = xlrd.open_workbook(path)
    def floattostr(self,val):
        if isinstance(val,float):
            val = str(int(val))
        return val
    def get_sheet_info(self):
        listkey = ['uname','pwd']
        infolist = []
        for row in range(1,self.sheet.nrows):
            info = [self.floattostr(val) for val in self.sheet.row_values(row)]   #EXCEL中输入的是数字,默认时会当成浮点型
            tmp = zip(listkey,info)
            infolist.append(dict(tmp))
        return infolist
    def get_sheetinfo_by_name(self,name):
        self.sheet = self.xl.sheet_by_name(name)
        return self.get_sheet_info()
    def get_sheetinfo_by_index(self,index):
        self.sheet = self.xl.sheet_by_index(index)
        return self.get_sheet_info()
if __name__ == '__main__':
    webinfo = get_webinfo(r'G:yayapycharmwebinfo')
    for key in webinfo:
        print(key,webinfo[key])
    userinfo = XlUserInfo(r'G:yayapycharmuserinfo.xlsx')
    info = userinfo.get_sheetinfo_by_name('Sheet1')
    print(info)

log_module.py

import time
import xlsxwriter
class Loginfo(object):
    def __init__(self,path='',mode='w'):
        fname = path+time.strftime('%Y-%m-%d',time.gmtime())
        self.log = open(path+fname+'.txt',mode,encoding='UTF-8')
    def log_write(self,msg):
        self.log.write(msg)
    def close(self):
        self.log.close()
class Xlloginfo(object):
    def __init__(self,path=''):
        fname = path+time.strftime('%Y-%m-%d',time.gmtime())
        self.row = 0
        self.xl = xlsxwriter.Workbook(path+fname+'.xlsx')
        self.style = self.xl.add_format({'bg_color':'red'})
    def xl_write(self,*args):
        col = 0
        style = ''
        if 'Error' in args:
            style = self.style
        for val in args:
            self.sheet.write_string(self.row,col,val,style)
            col += 1
        self.row+=1
    def log_init(self,sheetname,*title):
        self.sheet = self.xl.add_worksheet(sheetname)
        self.sheet.set_column('A:E',30)
        self.xl_write(*title)
    def log_write(self,*args):
        self.xl_write(*args)
    def log_close(self):
        self.xl.close()
if __name__ == '__main__':
    xlinfo = Xlloginfo()
    xlinfo.log_init('test','uname','pwd','result','info')
    xlinfo.log_close()

免责声明:文章转载自《python与selenium自动化基础-xlrd读取数据,Excel生成报告》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇如何使用python移除/删除非空文件夹?Go源代码安全审计工具之gosec下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

用node-http-proxy搭建代理

程序员三大必备网站是:Google、Github、StackOverflow。如果你还在用Baidu搜索技术文章的话,我想说的是,少年你已经被鄙视很多年了,赶紧换成谷歌吧,不要再被鄙视了!Github、StackOverflow在国内能够正常访问,但是Google由于众所周知的原因,国内无法访问,所以我们需要FQ访问Google。个人觉得shadowsoc...

Python接口自动化(四) https请求(SSLError解决办法)

电脑环境 python:3.7 requests:2.22.0 fiddler:v5.0.20  一、SSL问题 1.在你不启用fiddler时,python代码直接发送https请求,不会有SSL问题(也就是说不想看到SSL问题,关掉fiddler就行)  2.启动fiddler抓包,会出现SSLError这个错误: requests.except...

资产管理平台去除zabbix字样

1.主机可用性  修改/usr/share/zabbix/include/html.inc.php,文件没有改动过的话在602行,将zbx改成我们需要的即可 2.修改系统信息  修改/usr/share/zabbix/include/blocks.inc.php(修改样式),文件没有改动过的话在432行  修改/usr/share/zabbix/inc...

TAB页制作

tab标签画布和fixed画布的应用 加标签画布,继承子类信息 tab画布添加标签,按照需求添加 设置标签的子类信息 创建与标签同名的堆叠画布,有几个标签建几个画布,继承子类信息 数据块的项分别显示在不同的画布上 每个画布里的内容设置位置,不同画布被切割大小要相同(美观),项的起始位置也要相同,效果如下 tab画布,fixed画布与...

python爬虫(二十) select方法

有时候需要css选择器 1、通过标签名查找: <style type="text/css"> p{ background-color:pink; } </style> <body> <div class="box"> <p&...

爬取csdn的数据与解析存储(9)

安装软件: pip instal pymysq pip install peewee 创建数据模型orm from peewee import * db = MySQLDatabase("spider", host="127.0.0.1", port=3306, user="root", password="root") class BaseModel...