Python获取打印机读数(东芝泰格)

需求:

         情况是这样的,公司的行政同事需要统计打印机的打印页数,公司也不原因花钱买打印管理软件,只能人肉一台台的去抄打印页数。一体机品牌是东芝泰格的,型号为TOSHIBA e-STUDIO2505AC 。如果打印机数量少的话,偶尔抽个时间还是可以将就的,要是打印机的数量上来的,这个工作就惊人了。

        获取打印机读数的方式主要是通过登录web管理端,然后到指定的页面去获取打印机读数。

        这个工作需要定期的去执行,行政同事找到了我,希望能想想办法。

Python获取打印机读数(东芝泰格)_第1张图片

分析:

         既然客户找上门了,也不好意思拒绝。好在有Python在,这个问题不难。

         通常的做法是通过Python去爬取指定的页面。分析了网页的源码后发现问题来了,python爬网后发现,获取的代码都是Javascript源码,根本不能从网页元素中获得对应的数值。笔者就想到了另外一个问题,之前希望通过Python对Cisco交换机爬网,也是这样的情况,获取了一大堆的javascript 代码,看来这个办法行不通了。于是,笔者转向了Selenium, 果然没有失望。

 

Python获取打印机读数(东芝泰格)_第2张图片

 

具体实现方法如下:

  1. 调试指定的浏览器是chrome, 下载对应版本的chromedriver,并放置在与python一同的目录下面。
  2. 通过python模拟登录后,又遇到另外一个问题,frameset, 这个网站是多个frameset套用,如果指定不正确的话,程序会返回无法找到空间的错误。
  3. 代码如下:

from selenium import webdriver

from time import sleep

browser=webdriver.Chrome()

browser.get('http://135.*.*.*/?MAIN=TOPACCESS')  #登录打印机管理页面

print(browser.title)        #确认是否正常登录

browser.switch_to.frame('TopLevelFrame')

sleep(3)

print('yes')

browser.switch_to.frame('Loginframe') #切换frameset

sleep(3)

print(browser.title)

print(browser)

browser.find_element_by_name('USERNAME').send_keys('admin')

browser.find_element_by_name('PASS').send_keys('123456')

sleep(3)

browser.find_element_by_name('Login').click() #自动点击Login登录

sleep(3)

print(browser.title)        #确认是否登录成功

browser.switch_to.frame('TopLevelFrame')

sleep(3)

browser.switch_to.frame('topframe')

print("topframe")

sleep(3)

browser.find_element_by_id('COUNTER-anchor').click() #切换到指定的分类下面

print("Pass")

sleep(3)

browser.switch_to.default_content()     #注意,多frameset情况下每次切换完需要重置

browser.switch_to.frame('TopLevelFrame')

browser.switch_to.frame('contents')

pages=browser.find_element_by_id('Print_Total_CopyCounter_Full').text  #获取打印机指定值

print(pages)

browser.quit()

 

 

小结:

  1. 通过Python爬网,在无法直接通过网页元素获取值的情况下,推荐使用selenium. 代码执行过程中,可以关闭前台调试框。
  2. 多个frameset的情况下,切换一次后如果需要再次切换的话,需要重置一下浏览器。

这个方法对东芝泰格,富士施乐,思科设备都是适用的。

你可能感兴趣的:(运维,打印机)