#!/usr/bin/env python
-- coding: utf-8 --
‘’’
Created on 2019年1月27日
@author: chelei
‘’’
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.select import Select
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
import time
import pymysql
import logging
import sys
加入日志
获取logger实例
logger = logging.getLogger(“baseSpider”)
指定输出格式
formatter = logging.Formatter(’%(asctime)s
%(levelname)-8s:%(message)s’)
文件日志
file_handler = logging.FileHandler(“baseSpider.log”)
file_handler.setFormatter(formatter)
控制台日志
console_handler = logging.StreamHandler(sys.stdout)
console_handler.setFormatter(formatter)
为logge添加具体的日志处理器
logger.addHandler(file_handler)
logger.addHandler(console_handler)
logger.setLevel(logging.INFO)
class ATestMethod():
def init(self, passwd, url, host, user, pwd, db, port):
# self.username=username
self.password = passwd +
time.strftime(’%Y%m%d’, time.localtime(time.time()))
self.url = url
self.host = host
self.user = user
self.pwd = pwd
self.db = db
self.port = port
self.conn = None
self.cur = None
self.driver = webdriver.Firefox()
def login(self):
self.driver.get(self.url)
time.sleep(2)
self.driver.maximize_window()
self.driver.find_element_by_class_name(
"main-input").send_keys(self.password)
self.driver.find_element_by_class_name('login-btn').click()
WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located((By.CLASS_NAME, 'focus')),
message='测试页面打开失败')
return self.driver
def closebrowser(self):
self.driver.quit()
# 连接数据库
def open(self):
try:
self.conn = pymysql.connect(
self.host, self.user, self.pwd, self.db, self.port, charset='utf8')
except:
logger.error("connectDatabase failed")
return False
self.cur = self.conn.cursor()
return self.cur
# 关闭数据库
def close(self):
# 如果数据打开,则关闭;否则没有操作
if self.conn and self.cur:
self.cur.close()
self.conn.close()
return True
# 用来查询表数据
def fetchall(self, sql, params=None):
try:
self.open()
self.cur.execute(sql, params)
self.close()
return self.cur.fetchall()
except Exception as e:
print(e.message)
def swich_menu(self, menu):
# self.driver.implicitly_wait(5),eckodriver.exe版本过低
if menu == "智能巡检":
self.driver.find_element_by_xpath(
'//*[@id="zeus"]/div[2]/span[1]/dl/dd[1]').click()
if menu == "视频监控":
self.driver.find_element_by_xpath(
'//*[@id="zeus"]/div[2]/span[1]/dl/dd[2]').click()
if menu == "系统配置":
self.driver.find_element_by_xpath(
'//*[@id="zeus"]/div[2]/span[1]/dl/dd[3]').click()
WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located(
(By.XPATH, '//*[@id="page-settings"]/div[1]/span[2]/div/span[2]/div/div')), message='建站工具按钮未展示')
if menu == "巡检记录":
self.driver.find_element_by_xpath(
'//*[@id="zeus"]/div[2]/span[1]/dl/dd[4]').click()
if menu == "异常告警":
self.driver.find_element_by_xpath(
'//*[@id="zeus"]/div[2]/span[1]/dl/dd[5]').click()
if menu == "温湿度曲线":
self.driver.find_element_by_xpath(
'//*[@id="zeus"]/div[2]/span[1]/dl/dd[6]').click()
if menu == "今日任务":
self.driver.find_element_by_xpath(
'//*[@id="zeus"]/div[2]/span[1]/dl/dd[7]').click()
if menu == "巡检纠错":
self.driver.find_element_by_xpath(
'//*[@id="zeus"]/div[2]/span[1]/dl/dd[8]').click()
if menu == "帮助":
self.driver.find_element_by_xpath(
'//*[@id="zeus"]/div[2]/span[1]/dl/dd[9]').click()
def buildstation(self, stationname, stationID):
self.driver.find_element_by_xpath(
'//*[@id="panel-calibration-file"]/div[2]/div[1]/span[2]/div').click()
WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located(
(By.XPATH, '//*[@id="widget-add-station"]/div/span[1]/div[2]/input')), message='建站工具按钮未展示')
self.driver.find_element_by_xpath(
'//*[@id="widget-add-station"]/div/span[1]/div[2]/input').send_keys(stationname)
self.driver.find_element_by_xpath(
'//*[@id="widget-add-station"]/div/span[1]/div[3]/input').send_keys(stationID)
self.driver.find_element_by_xpath(
'//*[@id="widget-add-station"]/div/span[1]/div[4]/span[1]/div').click()
WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located(
(By.XPATH, '//*[@id="sysPop"]/span[3]/div[3]/div[2]/span/span')), message='确定对话框未展示')
TipsSuccess = self.driver.find_element_by_xpath(
'//*[@id="sysPop"]/span[3]/div[3]/div[1]').text
self.driver.find_element_by_xpath(
'//*[@id="sysPop"]/span[3]/div[3]/div[2]/span/span').click()
return TipsSuccess
def swich_submenu(self, submenu):
self.swich_menu("系统配置")
# 进入建站工具页面
self.driver.find_element_by_xpath(
'//*[@id="page-settings"]/div[1]/span[2]/div/span[2]/div/div').click()
WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located(
(By.XPATH, '//*[@id="panel-calibration-file"]/div[2]/div[2]/div[2]/table/tbody')), message='未进入建站工具页面')
self.driver.find_element_by_xpath(
'//*[@id="panel-calibration-file"]/div[2]/div[2]/div[2]/table/tbody').click()
WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located(
(By.XPATH, '//*[@id="panel-params-settings"]/div/span[1]/div/div[1]/span/span/div')), message='未进入参数设置页面')
if submenu == "参数设置":
self.driver.find_element_by_xpath(
'//*[@id="page-settings"]/div[3]/div[1]/div[1]/span[1]').click()
WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located(
(By.XPATH, '//*[@id="page-settings"]/div[3]/div[1]/div[1]/span[2]')), message='未进入参数设置页面')
if submenu == "巡检设备采集":
self.driver.find_element_by_xpath(
'//*[@id="page-settings"]/div[3]/div[1]/div[1]/span[2]').click()
WebDriverWait(self.driver, 10).until(EC.visibility_of_any_elements_located(
(By.XPATH, '//*[@id="control"]/div/div/div[2]/span[2]')), message='未进入巡检设备采集页面')
if submenu == "地图信息采集":
self.driver.find_element_by_xpath(
'//*[@id="page-settings"]/div[3]/div[1]/div[1]/span[3]').click()
WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located(
(By.XPATH, '//*[@id="page-settings"]/div[3]/div[1]/div[1]/span[3]')), message='未进入地图信息采集页面')
if submenu == "环境设备采集":
self.driver.find_element_by_xpath(
'//*[@id="page-settings"]/div[3]/div[1]/div[1]/span[4]').click()
WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located(
(By.XPATH, '//*[@id="page-settings"]/div[3]/div[1]/div[1]/span[4]')), message='未进入环境设备采集页面')
if submenu == "关联设备":
self.driver.find_element_by_xpath(
'//*[@id="page-settings"]/div[3]/div[1]/div[1]/span[5]').click()
WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located(
(By.XPATH, '//*[@id="page-settings"]/div[3]/div[1]/div[1]/span[5]')), message='未进入环境设备采集页面')
if submenu == "策略":
self.driver.find_element_by_xpath(
'//*[@id="page-settings"]/div[3]/div[1]/div[1]/span[6]').click()
WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located(
(By.XPATH, '//*[@id="page-settings"]/div[3]/div[1]/div[1]/span[6]')), message='未进入环境设备采集页面')
def getstationlist(self, stationID):
row = self.driver.find_element_by_xpath(
'//*[@id="panel-calibration-file"]/div[2]/div[2]/div[1]/table').find_elements_by_tag_name('tr')
stationtolist = []
for i in row:
j = i.find_elements_by_tag_name('td')[1].text
print(j)
if j == str(stationID):
f = i.find_elements_by_tag_name('td')
for item in f:
text = item.text
stationtolist.append(text)
return stationtolist
def getevneqlist(self, evnname):
evn = self.driver.find_element_by_xpath(
'//*[@id="panel-env-collect"]/div[2]/table').find_elements_by_tag_name('tr')
evneqlist = []
for i in evn:
j = i.find_elements_by_tag_name('td')[0].text
print(j)
if j == str(evnname):
f = i.find_elements_by_tag_name('td')
for item in f:
text = item.text
evneqlist.append(text)
return evneqlist
def buildEnvironmental(self, etype, number, space, category, name=""):
self.swich_menu("系统配置")
self.swich_submenu("环境设备采集")
time.sleep(2)
self.driver.find_element_by_xpath(
'//*[@id="panel-env-collect"]/div[1]/span/span[2]/div').click()
WebDriverWait(self.driver, 10).until(
EC.visibility_of_element_located(
(By.XPATH, '//*[@id="widget-env-collect-editor"]/div/div[1]/span[1]')),
message='添加环境设备页面未展示')
# 新建环境设备
self.driver.find_element_by_xpath(
'//*[@id="widget-env-collect-editor"]/div/div[2]/div[1]/input').send_keys(etype + number + name)
Select(self.driver.find_element_by_xpath(
'//*[@id="widget-env-collect-editor"]/div/div[2]/div[2]/select')).select_by_visible_text(etype)
self.driver.find_element_by_xpath('//*[@id="widget-env-collect-editor"]/div/div[2]/div[4]/input[2]').send_keys(
number)
Select(self.driver.find_element_by_xpath('//*[@id="widget-env-collect-editor"]/div/div[2]/div[5]/select')).select_by_visible_text(
space)
Select(self.driver.find_element_by_xpath('//*[@id="widget-env-collect-editor"]/div/div[2]/div[6]/select')).select_by_visible_text(
category)
self.driver.find_element_by_xpath(
'//*[@id="widget-env-collect-editor"]/div/div[2]/div[7]/span/div').click()
def reviseEnvironmental(self, rename="None", num="None"):
self.driver.find_element_by_xpath(
'//*[@id="panel-env-collect"]/div[2]/table/tbody/tr[1]/td[7]/span[1]').click()
WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located(
(By.XPATH, '//*[@id="widget-env-collect-editor"]/div')), message='修改环境设备页面未展示')
if rename == "None":
print('设备名称不修改')
else:
self.driver.find_element_by_xpath(
'//*[@id="widget-env-collect-editor"]/div/div[3]/div[1]/input').clear()
self.driver.find_element_by_xpath(
'//*[@id="widget-env-collect-editor"]/div/div[3]/div[1]/input').send_keys(rename)
if num == "None":
print('设备位号不修改')
else:
self.driver.find_element_by_xpath(
'//*[@id="widget-env-collect-editor"]/div/div[3]/div[4]/input[2]').clear()
self.driver.find_element_by_xpath(
'//*[@id="widget-env-collect-editor"]/div/div[3]/div[4]/input[2]').send_keys(num)
self.driver.find_element_by_xpath(
'//*[@id="widget-env-collect-editor"]/div/div[3]/div[7]/span/div').click()
def selectEnvironmental(self, envname, envtype, envspace):
self.driver.find_element_by_xpath(
'//*[@id="panel-env-collect"]/div[1]/div[1]/input').send_keys(envname)
Select(self.driver.find_element_by_xpath(
'//*[@id="panel-env-collect"]/div[1]/div[2]/select')).select_by_visible_text(envtype)
Select(self.driver.find_element_by_xpath(
'//*[@id="panel-env-collect"]/div[1]/div[3]/select')).select_by_visible_text(envspace)
self.driver.find_element_by_xpath(
'//*[@id="panel-env-collect"]/div[1]/span/span[1]/div').click()