python学习(三)用python模拟登陆ZABBIX(GRAFANA)的几种方式
在日常开发应用当中,经常会遇到想通过爬虫模拟登录某个网站,从而进一步采集数据,模拟操作等工作。如果不登录,requests就基本OK了,但是要登录,还得采取一定的方式来完成数据输入,模拟登陆等。苍老师说了,不会用python的开发不是好运维,虽然苍老师已经结婚了( ̄_, ̄ )
比较常用的方式有三种:
selenuim+phantomjs,selenium+firefox,selenium+chrome。下面就三种方式分别测试如下(环境:centos7最小化安装)
selenuim+phantomjs
1.1 安装selenium
1. tar zxvf selenium-3.0.2.tar.gz
2. cd selenium-3.0.2
3. python setup.py install
1.2 安装phantomjs
1. rpm -Uvh freetype-2.4.11-12.el7.x86_64.rpm
2. rpm -Uvh fontconfig-2.10.95-10.el7.x86_64.rpm
3. tar -jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
4. mv phantomjs-2.1.1-linux-x86_64 /usr/local/phantomjs-2.1.1
1.3 程序源码
1. #!/usr/bin/env python
2. # -*- coding:utf-8 -*-
3. # __author__ = 'bluetom'
4. import shutil
5. import sys
6. import time
7. import datetime
8. from selenium import webdriver
9. import os
10.start = time.time()
11.
12.def get_item_pic(url, user, passwd, itemid):
13. try:
14. driver = webdriver.PhantomJS("/usr/local/phantomjs-2.1.1/bin/phantomjs",service_log_path=os.path.devnull)
15. driver.get(url)
16. driver.set_window_size(1600, 1200)
17. driver.find_element_by_id("name").send_keys("Admin") #输入用户名
18. driver.find_element_by_id("password").send_keys("123456") #输入用户名
19. driver.find_element_by_id("enter").click() #点击登陆按钮
20. item_url = url + "history.php?action=showgraph&fullscreen=1&itemids[]=" + itemid #跳转
21. driver.get(item_url)
22. driver.find_element_by_link_text("1y").click() #点击1年
23. except Exception, e:
24. print e
25.
26.if __name__ == "__main__":
27. print get_item_pic("http://192.168.1.199/zabbix/", 'Admin', '123456', '25255')
selenium+firefox
2.1 安装依赖包
1. yum install wget firefox gcc zlib zlib-devel Xvfb
2. yum groupinstall "fonts"
3. yum install firefox
2.2 安装PyVirtualDisplay
1. 官网地址:https://pypi.python.org/pypi/PyVirtualDisplay(点击查看)
2. 百度地址:http://pan.baidu.com/s/1gf2uUBL(点击查看)
3.
4. tar zxvf PyVirtualDisplay-0.2.1.tar.gz
5. cd PyVirtualDisplay-0.2.1
6. python setup.py install
7.
8. 注意:如果提示EasyProcess相关的错误 ,请先安装EasyProcess再安装PyVirtualDisplay。
9.
10.PyVirtualDisplay下载地址(点击查看):https://pypi.python.org/pypi/EasyProcess 安装方法和PyVirtualDisplay一样
11.
12.由于我的CentOS是没有界面的,所以需要安装PyVirtualDisplay来模拟。
2.3 安装geckodriver
1. 官网地址:https://github.com/mozilla/geckodriver/releases(点击查看)
2. 百度地址:http://pan.baidu.com/s/1i54YH5z(点击查看)
3.
4. tar zxvf geckodriver-v0.11.1-linux64.tar.gz
5. mv geckodriver /usr/local/bin
2.4 程序源码
1. #!/usr/bin/env python
2. # -*- coding:utf-8 -*-
3. # __author__ = 'bluetom'
4. import sys
5. import time
6. import datetime
7. from selenium import webdriver
8. from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
9. from pyvirtualdisplay import Display
10.import os
11.
12.def get_grafana(url):
13. try:
14. start = time.time()
15. data = {}
16. # driver = webdriver.PhantomJS("/usr/local/phantomjs-2.1.1/bin/phantomjs")
17. display = Display(visible=0, size=(1600, 900))
18. display.start()
19. binary = FirefoxBinary(u'/home/bluetom/下载/firefox/firefox')
20. driver = webdriver.Firefox(firefox_binary=binary)
21. driver.get(url)
22. driver.find_element_by_name("username").send_keys("admin") #输入用户名
23. driver.find_element_by_name("password").send_keys("123456") #输入用户名
24. driver.find_element_by_xpath("/html/body/grafana-app/div[2]/div/div/div[2]/form/div[3]/button").click() #点击登陆按钮
25. time.sleep(0.5)
26. driver.get(url)
27. handle=driver.current_window_handle # 输出当前窗口句柄
28. driver.close()
29. driver.quit()
30. display.stop()
31. except Exception, e:
32. print e
33.if __name__ == "__main__":
34. get_grafana("http://192.168.1.199:3000")
selenium+chrome
3.1 安装依赖包
1. yum install wget gcc zlib zlib-devel Xvfb
2. yum groupinstall "fonts"
3.2 安装谷歌浏览器
1. yum install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm
3.3 安装chromedriver
1. wget -N http://chromedriver.storage.googleapis.com/2.29/chromedriver_linux64.zip unzip chromedriver_linux64.zip
2. chmod +x chromedriver
3. sudo mv -f chromedriver /usr/local/share/chromedriver
3.4 安装PyVirtualDisplay
1. 官网地址(点击查看):https://pypi.python.org/pypi/PyVirtualDisplay
2. 百度地址(点击查看):http://pan.baidu.com/s/1gf2uUBL
4. tar zxvf PyVirtualDisplay-0.2.1.tar.gz
5. cd PyVirtualDisplay-0.2.1
6. python setup.py install
7.
8. 注意:如果提示EasyProcess相关的错误 ,请先安装EasyProcess再安装PyVirtualDisplay。
9.
10.PyVirtualDisplay下载地址(点击查看):https://pypi.python.org/pypi/EasyProcess 安装方法和PyVirtualDisplay一样
11.
12.由于我的CentOS是没有界面的,所以需要安装PyVirtualDisplay来模拟
13.
3.5 程序源码
1. #!/usr/bin/env python
2. # -*- coding:utf-8 -*-
3. # __author__ = 'bluetom'
4. import sys
5. import datetime
6. from selenium import webdriver
7. from pyvirtualdisplay import Display
8. import os
9. def get_gra_chrome(url):
10. try:
11. display = Display(visible=0, size=(1600, 900))
12. display.start()
13. driver = webdriver.Chrome("/usr/local/share/chromedriver")
14. driver.get(url)
15. driver.find_element_by_name("username").send_keys("admin") #输入用户名
16. driver.find_element_by_name("password").send_keys("123456") #输入用户名
17. driver.find_element_by_xpath("/html/body/grafana-app/div[2]/div/div/div[2]/form/div[3]/button").click() #点击登陆按钮
18. time.sleep(0.5)
19. handle = driver.current_window_handle # 输出当前窗口句柄
20. driver.close()
21. driver.quit()
22. display.stop()
23. except Exception, e:
24. print e
25. if __name__ == "__main__":
26. get_gra_chrome("http://192.168.1.199:3000")
后记
如果是有界面的ubuntu或者Windows,就可以看到浏览器被启动,然后自动在浏览器里面做一些操作,譬如点击链接,跳转,新建页面等等。