一、简单便写了个web自动化脚本,使用了selenium、openpyxl,整体框架还有许多随意的地方,大家见谅(使用python3.0以上)
二、我的思路
1、我想的是通过excel,得到浏览器类型、使用何种元素定位方法、定位的元素元素值、针对该元素需要做什么操作(一般都是点击/输入)等,如图
2、既然使用excel作为数据来源,那么我就用了我之前写的openpyxl处理excel的代码(以前发布的文章)
3、封装driver、find_element等,还做了个config放置网站地址、chrome驱动地址、excel文件地址等
4、调用使用
三、具体代码,按思路顺序来展示
第一点见上图,不讲了
第二点代码去我之前的文章找,不讲了,直接复制全部代码过来就行(dat_excel_01.py)
第三点代码如下(tool_class.py)
from configs import config
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
class WpDriver:
element_operation = ''
send_value = ''
# 这里就是为了获得浏览器驱动driver,兼顾其他浏览器,比如chrome、火狐、IE等
def get_drivers(self, driver_type):
if driver_type == 'Chrome':
s = Service(config.chrome_path)
driver = webdriver.Chrome(service=s)
return driver
# 这里封装了个打开网站的方法,并放大浏览器
def open_url(self, driver, url):
driver.get(url)
sleep(5)
driver.maximize_window()
sleep(3)
# 这里封装的就是find_element,主要是定位元素使用什么方法,是使用id、xpath、css等,然后每个方法都给他加了个操作判断
#(入参依次是driver、元素定位方法(id、xpath、css)、元素的值(id值、xpath值等)、针对该元素的操作(click、send_keys)、send_keys的时候需要输入的值)
def find_element(self, driver, element_type, element_value, element_operation=element_operation,
send_value=send_value):
# 这里是有的地方需要纯元素,比如进入iframe、滑动到指定元素等,直接返回元素对象
if element_type == 'id' and element_operation == '':
return driver.find_element(By.ID, element_value)
# 这里是使用id定位元素,并进行点击操作
if element_type == 'id' and element_operation == 'click':
driver.find_element(By.ID, element_value).click()
# 这里是使用id定位元素,并进行输入操作
if element_type == 'id' and element_operation == 'send_keys':
driver.find_element(By.ID, element_value).send_keys(send_value)
if element_type == 'xpath' and element_operation == '':
return driver.find_element(By.XPATH, element_value)
if element_type == 'xpath' and element_operation == 'click':
driver.find_element(By.XPATH, element_value).click()
if element_type == 'xpath' and element_operation == 'send_keys':
driver.find_element(By.XPATH, element_value).send_keys(send_value)
if element_type == 'css' and element_operation == '':
return driver.find_element(By.CSS_SELECTOR, element_value)
if element_type == 'css' and element_operation == 'click':
driver.find_element(By.CSS_SELECTOR, element_value).click()
if element_type == 'css' and element_operation == 'send_keys':
driver.find_element(By.CSS_SELECTOR, element_value).send_keys(send_value)
# 这里封装了个浏览器关闭
def close_web(self, driver):
driver.close()
# 由于我这边使用的系统有图形码,所以做了半自动的登录,手动去输入图形码
def login(self, driver):
# 输入登录手机号
driver.find_element(By.CSS_SELECTOR, "div[class='el-input']>input").send_keys("13600000000")
config代码(configs->config)
import os
open_system_url = "填系统地址"
path = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
# abspath用来将“/”变成“\”
# dirname用来获取当前位置名称
chrome_path = os.path.join(path, 'driver_type\\chromedriver.exe')
# print(chrome_path)
excel_data_path = os.path.join(path, 'excel_data\\test_excel.xlsx')
第四点代码如下,这里在实践的时候发现问题了,所以都写这了,看起来有点乱(test_main.py):
from tool_class import WpDriver
from configs import config
from time import sleep
import dat_excel_01
def webdata():
da = dat_excel_01
b = da.list_excel_data()
dr = WpDriver()
web_type = b[0].get('浏览器类型')
driver1 = dr.get_drivers(web_type)
sleep(3)
dr.open_url(driver1, config.open_system_url)
sleep(3)
dr.login(driver1)
sleep(20)
for ii in range(0, len(b)):
a = b[ii]
index_txt = a.get('测试点')
element_type = a.get('元素定位方法')
element_value = a.get('元素值')
element_operation = a.get('对元素的操作')
send_value = a.get('需要输入的值')
if send_value is not None:
pass
else:
send_value = ''
if element_operation is not None:
pass
else:
element_operation = ''
if index_txt == '切换网页':
sleep(2)
a = driver1.window_handles
driver1.switch_to.window(a[-1])
sleep(2)
elif index_txt == '进入内嵌iframe':
sleep(2)
fra_a = dr.find_element(driver=driver1, element_type=element_type, element_value=element_value,
element_operation=element_operation, send_value=send_value)
driver1.switch_to.frame(fra_a)
sleep(2)
elif index_txt == '退出iframe':
driver1.switch_to.default_content()
elif index_txt == '下滑指定元素点':
sleep(2)
al = dr.find_element(driver=driver1, element_type=element_type, element_value=element_value,
element_operation=element_operation, send_value=send_value)
driver1.execute_script("arguments[0].scrollIntoView();", al)
sleep(2)
else:
dr.find_element(driver=driver1, element_type=element_type, element_value=element_value,
element_operation=element_operation, send_value=send_value)
sleep(2)
sleep(10)
dr.close_web(driver1)
if __name__ == '__main__':
webdata()
四、整体如图,没办法,不能传压缩文件