ManageEngine的python自动化ID爬取实践


背景

由于工作需要,几乎每天都要从 Manage Engine ServiceDesk 下统计故障ID,并制作 excel 表格,
实际上是一些机械化的工作,却要花不少时间。这次基本上从零基础基于搜索引擎完成一个自动化统计的python脚本,大大简化了工作流程。

准备

  • python 运行环境
  • 软件包: BeautifulSoup,requests_html,openpyxl,time,logging,colorlog,re,selenium
  • 一台持续运行的server

主要实现

其实就是各个软件包的混合使用,其中selenium主要用于自动登录系统,并更新 cookie,这样可以通过requests_html去获取网页内容。
selenium是一个Web应用程序测试的工具,可以模拟真实用户对浏览器的操作,通过selenium可以很方便地完成登录操作,而不需要去抓包 http 请求等,只要打开 F12 定位到用户名和密码框,输入参数,再模拟点击登录按钮,即可完成登录。

用户名的获取:
chorme 中打开需要登录的网页,f12 打开调试,找到 elements 选项卡,同时点击左上角的小鼠标,再单击需要定位的元素,就可以很方便地在代码中定位需要的元素。

# 这段代码展示了登录过程
from selenium import webdriver

driver = webdriver.Chrome()

driver.set_window_position(20,40)
driver.set_window_size(1100,700)

driver.get("http://website")

driver.find_element_by_id('username').clear()
driver.find_element_by_id('username').send_keys('your user name')
driver.find_element_by_id('password').clear()
driver.find_element_by_id('password').send_keys('your password')
driver.find_element_by_name('loginButton').click()

通过get_cookies()函数可以拿到最新 cookie,然后使用requests_html就可以获取到网页内容。

session = HTMLSession()
logger.info('更新cookie...')
mmsCookie = mms_load.getCookie()    # 自己封装的登录模块
# 伪装浏览器
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36',
    'Cookie': mmsCookie,
}
logger.debug(headers)
response = session.get('http://website', headers=headers)

其中,response就是返回的网页内容,同时这里用到了logging模块,方便调试和记录 log 文件,具体用法可以自行搜索。

这里碰到了头疼的问题是,Manage Engine ServiceDesk 的所有描述内容都是在一个 table 里面的,常规的定位方法无法定位到里面的内容,虽然 chrome 提供的方便的定位方法供复制,但是我试了一下都没法定位到表格里的内容,由于本人并不专业,就没有再深究怎么去定位表格里的内容。

我直接将整个网页内容统统换成文本,自己再去处理一行行的表格,这里用到了BeautifulSoup,实际上requests_html也包含同样的方法。

""" 获取表格内容 """
for x in response.html.find('.uicomponent .tableComponent'):    
    soup = BeautifulSoup(x.html, 'lxml') 
    for line in soup.text.split('\n'):
        if(line.strip()!=''):
            content.append(line)

再做一些简单的处理,便可以把表格的内容写入到字典里,这样需要的内容已经拿到了,剩下的就基本上是写入 excel 的工作了。
写入 excel 使用的是 openpyxl 包,我对比了几个流行的 excel 处理模块,最终这个比较满足需求而且操作方便。写入单元格、合并单元格、设置框线、设置字体、设置行高列宽、设置单元格样式等等一系列操作后,基本上就完成了表格的写入,以上操作除了设置框线需要自己写一下遍历以外,其它的基本上可以通过自带的方法完成。

最终大概是这样:

最后再一个 powershell 脚本,加入任务计划定时运行,即可完美完成自动化更新。


脚本只有一行代码,理论上直接在操作里输入这行代码定时执行也可以,这里我顺便试了一下 ps 脚本。

最终在相应的生成目录下,即可找到10分钟更新一次的 excel 文件,省去了大量的时间。

  • 分享:
评论
还没有评论
    发表评论 说点什么