实战技巧:Python爬取OEM 12C上的告警信息并推送至微信企业号
本文主要介绍通过 Python 爬虫脚本,将所有目标的告警信息爬下来,并推送到微信企业号应用实现单点对多目标的巡检。籍此以减少 DBA 的工作量。
如有不了解 Oracle Enterprise Manager Cloud Control 12c 的,可搜索信息自行了解。
一、设置 Incident Manager: All open incidents 为管理器打开的主页面
如下图所示:
二、利用 Python 编写爬虫
利用 python+selenium+geckodriver 爬取一中告警信息推送到企业号。
注意:需要安装 firefox 浏览器(linux 默认自带的 firefox 版本较低的请自行升级到最新版),同时是用 python2.7 写的。
以下是实现代码示范:
# -*- coding:utf-8 -*-
import sys
import urllib2
import json
import cx_Oracle
import os
from selenium import webdriver
from requests import Session
from selenium.webdriver.firefox.options import Options as FirefoxOptions
from selenium.webdriver.chrome.options import Options as ChromeOptions
from time import sleep
default_encoding = 'utf-8'
if sys.getdefaultencoding() != default_encoding:
reload(sys)
sys.setdefaultencoding(default_encoding)
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
class Token(object):
def __init__(self, corp_id, corp_secret):
self.corp_id = corp_id
self.corp_secret = corp_secret
self.baseurl = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={0}&corpsecret={1}'.format(self.corp_id, self.corp_secret)
self.send_values = {}
# Get AccessToken
def get_token(self):
conn = cx_Oracle.connect('FI_SAL/FI_SAL@*.*.*.*:1521/orcl')#本人企业号token定时爬取存在数据库里
cur = conn.cursor()
sql = "select * from WX_ACCESS_TOKEN"
cur.execute(sql)
result = cur.fetchall()
for row in result:
self.access_token = row[0]
cur.close()
conn.close()
return self.access_token
# Send Message
def send_data(self, userid, message):
self.message = message
self.send_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + self.access_token
self.send_values = {
"touser": userid,#接收人
"msgtype": "text",
"agentid": "55",#企业号对应的应用ID
"text": {
"content": message
},
"safe": "0"
}
send_data = json.dumps(self.send_values, ensure_ascii=False)
send_request = urllib2.Request(self.send_url, send_data)
response = urllib2.urlopen(send_request)
# Get Response Message
msg = response.read()
print userid + ':' + msg
return msg
corpid = '*****************************'
corpsecret = '**********************************'
#接收人 DBA加部门领导
toUser = '******|******'
req = Session()
req.headers.clear()
options = FirefoxOptions()
options.add_argument("--headless")
wd = webdriver.Firefox(firefox_options=options)
#wd = webdriver.Firefox()
logInUrl = 'https://登录页面的IP:登录页面的端口/em/faces/logon/core-uifwk-console-login'
wd.get(logInUrl)
wd.find_element_by_xpath('//*[@id="j_username::content"]').send_keys('***填写登录账号**')
wd.find_element_by_xpath('//*[@id="j_password::content"]').send_keys('***填写登录密码**')
sleep(2)
wd.find_element_by_xpath('//*[@id="login"]').click()
sleep(2)
wd.find_element_by_xpath('//*[@id="emT:lrmd1:iCustVw:4:custViewLink"]').click()
sleep(2)
i = 1
wxPostList = []
# start with 0 column
while i < 100 :
j = 1
while j < 100 :
xPathColumn1 = '//*[@id="emT:lrmd1:tbmd1:pc2:t2::db"]/table[' + str(i) + ']/tbody/tr[' + str(j) + ']/td[2]/div/table/tbody/tr/td[1]'
xPathColumn2 = '//*[@id="emT:lrmd1:tbmd1:pc2:t2::db"]/table[' + str(i) + ']/tbody/tr[' + str(j) + ']/td[2]/div/table/tbody/tr/td[2]'
xPathColumn3 = '//*[@id="emT:lrmd1:tbmd1:pc2:t2::db"]/table[' + str(i) + ']/tbody/tr[' + str(j) + ']/td[2]/div/table/tbody/tr/td[3]'
xPathColumn6 = '//*[@id="emT:lrmd1:tbmd1:pc2:t2::db"]/table[' + str(i) + ']/tbody/tr[' + str(j) + ']/td[2]/div/table/tbody/tr/td[6]'
try :
tableElementColumn1 = wd.find_element_by_xpath(xPathColumn1)
tableElementColumn2 = wd.find_element_by_xpath(xPathColumn2)
tableElementColumn3 = wd.find_element_by_xpath(xPathColumn3)
tableElementColumn6 = wd.find_element_by_xpath(xPathColumn6)
tableElementColumn1ImgTag = tableElementColumn1.find_element_by_tag_name("img")
tableElementColumn1Content = tableElementColumn1ImgTag.get_attribute("title")
tableElementColumn2Content = tableElementColumn2.get_attribute('textContent')
tableElementColumn3Content = tableElementColumn3.get_attribute('textContent')
tableElementColumn6Content = tableElementColumn6.get_attribute('textContent')
tempMsg = \
"Target: " + tableElementColumn3Content + "\n" \
+ "Severity: " + tableElementColumn1Content + "\n" \
+ "Last Updated: \n" + tableElementColumn6Content[0:24] + "\n" \
+ "Summary: " + tableElementColumn2Content + "\n\n"
wxPostList.append(tempMsg)
j = j + 1
except :
break
#sleep(1)
i = i + 1
wd.quit()
i = 0
j = 0
wxMsg = '信息技术局技术开发部\n数据库巡检结果:\n\n'
if len(wxPostList) > 0 :
for i in range(len(wxPostList)) :
wxMsg = wxMsg + wxPostList[i]
if j == 9 or i == (len(wxPostList) - 1):
wxMsg = wxMsg.encode('utf-8')
get_test = Token(corpid, corpsecret)
get_test.get_token()
msg = get_test.send_data(toUser, wxMsg)
wxMsg = ''
j = 0
j = j + 1
else:
wxMsg = wxMsg + '所有鸿翔数据库无任何告警信息!'
get_test = Token(corpid, corpsecret)
get_test.get_token()
msg = get_test.send_data(toUser, wxMsg)
三、以下是推送结果
通过这样的监控设置,将信息及时送达,即起到通知的及时性,又实现了自动化流程,一定的减少了DBA的工作量。
原文发布时间为:2018-07-05
本文作者:徐美兰
本文来自云栖社区合作伙伴“数据和云”,了解相关信息可以关注“数据和云”。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
Python Django(WEB电商项目构建)
(坚持每一天,就是成功) Python Django Web框架,Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,模板T和视图V组成。 安装Python 和 Django可以自己查阅资料 此文均在Pycharm下进行需要下载可加群:607021567找群主,本文主要介绍电商产品。所以可自行学习,创造自己的网站。 1、Django架构设计: Django是一个基于 MVC构造的框架。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为 MTV模式。它们各自的职责如下: 层次 职责 模型(Model),即数据存取层 处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。 模板(Template),即业务逻辑层 处理与表现相关的决定: 如何在页面或其他类型文档中进行显示。 视图(View),即表现层 存取模型及调取恰当模板的相关逻辑。模型与模板的桥梁。 2、工作机制: (这里的文件顺序...
-
下一篇
C#爬虫使用代理刷csdn文章浏览量
昨天写了一篇关于“ c#批量抓取免费代理并验证有效性”的文章,接着昨天的目标继续完成吧,最终实现的目的就是刷新csdn文章的浏览量(实际上很简单,之前博客园的文章也是可以使用代理ip来刷的,后来不行了),刷文章的浏览量本身是可耻的,没有任何意义,当然技术无罪。之前是在csdn写文章,自从csdn改版之后就主要在博客园写。 1.如何维护代理IP库? 想要使用代理IP,那就必须有一个一定数量、足够有效的代理ip库,在学习阶段,随便玩玩那就只能从免费的代理IP网站上抓取,没有一定数量的代理刷文章流浪量非常慢,首先就是要维护好自己的代理Ip库 之前用过的西刺代理、66ip比较靠谱,西祠好像有反扒,遇到过一次,不知道是西祠网站的问题还是反扒的策略,这两个网站每分钟抓取的能用的代理大概有2,3个,这已经算的上比较客观的了, data5u、快代理、ip3366网页端更新的非常少,而且有效性比较低,快代理抓取网页还必须设置Useragent,发现设置后获取的ip的端口和网页端不一致,很玩味是吧,没办法免费的就是这样,不然人家就收费了,当然付费的代理也不稳定,但肯定是比免费的好很多。 维护代理质量 从网...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2全家桶,快速入门学习开发网站教程
- Dcoker安装(在线仓库),最新的服务器搭配容器使用
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- MySQL8.0.19开启GTID主从同步CentOS8
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- MySQL数据库在高并发下的优化方案
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作