需求:
情况是这样的,公司的行政同事需要统计打印机的打印页数,公司也不原因花钱买打印管理软件,只能人肉一台台的去抄打印页数。一体机品牌是东芝泰格的,型号为TOSHIBA e-STUDIO2505AC 。如果打印机数量少的话,偶尔抽个时间还是可以将就的,要是打印机的数量上来的,这个工作就惊人了。
获取打印机读数的方式主要是通过登录web管理端,然后到指定的页面去获取打印机读数。
这个工作需要定期的去执行,行政同事找到了我,希望能想想办法。
分析:
既然客户找上门了,也不好意思拒绝。好在有Python在,这个问题不难。
通常的做法是通过Python去爬取指定的页面。分析了网页的源码后发现问题来了,python爬网后发现,获取的代码都是Javascript源码,根本不能从网页元素中获得对应的数值。笔者就想到了另外一个问题,之前希望通过Python对Cisco交换机爬网,也是这样的情况,获取了一大堆的javascript 代码,看来这个办法行不通了。于是,笔者转向了Selenium, 果然没有失望。
具体实现方法如下:
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()
小结:
这个方法对东芝泰格,富士施乐,思科设备都是适用的。