上一篇excel 模块的编写
这一部分算是重中之重了,封装了一些page里面公用的方法和属性,包括driver,server等。做接口自动化的时候,我们用requests请求时可以将接口的返回值保存记录下来,那做web的时候有没有方法了?答案是有的,通过查阅资料,可以利用browsermobproxy 设置代理来抓取接口信息。后面有机会专门写篇文章来记录一下我的学习感受。代码:
# _*_conding:utf-8_*_
# 作者: 杨佳
# 创建时间: 2020/9/3 21:42
# 文件: base_function
import json
import time
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.chrome.options import Options
from browsermobproxy import Server # python 下载browsermobproxy库
class BaseFunction:
def __init__(self):
# 建立一个服务,首先要在网上下载browsermob的压缩包,然后解压到本地
self.server = Server(
r"E:\Program Files\browsermob-proxy-2.1.4-bin\browsermob-proxy-2.1.4\bin\browsermob-proxy.bat")
# 开启服务
self.server.start()
# 设置代理
self.proxy = self.server.create_proxy()
chrome_options = Options()
chrome_options.add_argument('--proxy-server={0}'.format(self.proxy.proxy))
# 请求https网址时,忽略证书问题
chrome_options.add_argument('--ignore-certificate-errors')
# 初始化浏览器
self.driver = webdriver.Chrome(chrome_options=chrome_options)
# 显示等待的公共方法
def wait_element_visible(self, locator, timeout=20, poll_frequency=0.2):
"""显示等待"""
wait = WebDriverWait(self.driver, timeout, poll_frequency)
e = wait.until(expected_conditions.visibility_of_element_located(locator))
return e
def set_proxy(self,title):
self.proxy.new_har(title, options={'captureContent': True})
return self
# 封装网址调用方法
def get_url(self, url):
self.driver.get(url)
self.driver.implicitly_wait(5)
return self
# 记录调用url,以及业务操作时生成的接口信息
def log_interface(self, path):
time.sleep(3)
result = self.proxy.har
for entry in result['log']['entries']:
if '.json' in entry.get('request').get('url'):
print(entry)
dat = json.dumps(entry, ensure_ascii=False, indent=2)
# 将接口信息保存
file = open('path', 'a+', encoding=" utf-8 ")
file.write(dat)
time.sleep(0.5)
file.close()
return self
# 截图
def screencap(self, path):
self.driver.save_screenshot(path)
# 关闭服务
def server_stop(self):
self.server.stop()
return self
# 开启服务
def server_start(self):
self.server.start()
return self
def driver_close(self):
self.driver.quit()
return self
下一篇:page类