热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python爬虫之初始Selenium

1、初始Selenium[1]是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7,8,9,10,11),

1、初始

  Selenium[1]  是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。

2、使用方法

  案例:

  需求:

  公司购买了一一批优科无线AP,本人刚涉足python爬虫行业,需要实现的功能就是,对好几十台优科无线AP进行定时重启。原来做过TP-LINK941n的无线路由器定时重启,按照原来的思路进行寻找方法-------抓包。通过抓取重启路由器的链接,对无线路由器进行定时重启(定时的事情就交给操作系统自带的任务计划)。然后就开始了抓包操作,然而最终还是以失败告终---也许因为我对抓包工具不太熟练。但是功能还是要必须实现,偶然听到朋友们之前提起的selenium可以模仿人的操作,进行爬虫操作。所以我就开始了对selenium的研究。

  官方文档:http://selenium-python.readthedocs.io/waits.html#explicit-waits

  1、路由器的登录界面

  

  2、首先环境准备。

    python3.5.2

    pip9.0.1

    pip3 install  selenium

    最新版谷歌浏览器(FQ升级的事情就不再熬述)

    最新版的webdriver(http://chromedriver.storage.googleapis.com/index.html)

    

    注意:3.31才是最新版,可以打开文件夹进去看驱动的具体时间。

    谷歌浏览器需要加上环境变量,将驱动文件放到谷歌浏览器的安装路径下面。

 

  3、首先进行用户名和密码登录

  导入模块

  

from selenium import webdriver

 

  

  让程序打开浏览器,当然你也可以用其它浏览器,我在这里使用的是谷歌浏览器。

browser = webdriver.Chrome()

  4、找到输入用户名和密码的地方。

5、复制这个标签的selector和XPath路径,哪个都可以的。在这里我用的是xpath。

        # 获取用户名输入框
            login_name = browser.find_element_by_xpath('//*[@id="login-username"]')
            # 获取输入密码的输入框
            login_pwd = browser.find_elements_by_xpath('//*[@id="password"]')[0]
            #获取登录的按钮
            button = browser.find_elements_by_xpath('//*[@id="loginform"]/input')[0]

 

  

 

  

6、拿到用户名和密码和点击登录的按钮,后我们需要给用户名和密码赋值和点击登录的按钮

 #在输入用户名的位置输入用户名
 login_name.send_keys('super')
#在输入密码的输入框输入密码
 login_pwd.send_keys('gaosiedu.com')
#点击登录按钮
button.click()

 

7、登录成功后我们发现一个问题,无线AP后台页面用的是frame标签(涉及到了各种切,不过不要头疼看下面)

  A是左边菜单栏,B是右边的内容栏,我们首先得进去A里面找到左边的点击重启的按钮,然后在切出来,再进去B的frame标签切进去拿到重启的按钮,点击操作。

        #找到第一个frame标签(左侧栏)
            browser.switch_to.frame("navframe")
            #切换进去,执行Reboot Now这个按钮,
            reboot_bo = browser.find_element_by_xpath('/html/body/dl[3]/dd/ul/li[2]/a')
            #执行操作,得到右边Reboot Now的重启按钮
            reboot_bo.click()
            #跳出当前的frame标签
            browser.switch_to.default_content()
            #找到执行完后右边的frame标签
            browser.switch_to.frame('mainframe')
            #进入标签后找到重启的按钮
            reboot_boot = browser.find_element_by_xpath('//*[@id="adminform"]/table/tbody/tr[1]/td/input[2]')
            #执行重启的操作
            reboot_boot.click()

  8、大功告成,如果有60台无线AP的话还需要优化的地方很多。完整代码如下

 1 import os
 2 import time
 3 from selenium import webdriver
 4 from  selenium.webdriver.common.by import By
 5 from selenium.webdriver.support.ui import WebDriverWait
 6 from selenium.webdriver.support import expected_conditions as EC
 7 
 8 USER_NAME = 'super'
 9 USER_PWD = 'gaosiedu.com'
10 PATH = os.getcwd()
11 browser = webdriver.Chrome()
12 web_wait = WebDriverWait(browser,10)
13 
14 #加载ip列表
15 def GET_Ip():
16     path = PATH+'\\ip_list.txt'
17     with open(path,'r') as file:
18         for ip in file.readlines():
19             ip = ip.strip()
20             reboot_spiders(ip)
21 
22 #重启方法
23 def reboot_spiders(ip_arg):
24     if len(ip_arg) > 0:
25         try:
26             browser.get("https://{IP}/login.asp".format(IP=ip_arg))
27 
28             # 获取用户名输入框
29             login_name = web_wait.until(EC.presence_of_element_located((By.XPATH,'//*[@id="login-username"]')))
30             # 获取输入密码的输入框
31             login_pwd = web_wait.until(EC.presence_of_element_located((By.XPATH,'//*[@id="password"]')))
32             #获取登录的按钮
33             button = web_wait.until(EC.element_to_be_clickable((By.XPATH,'//*[@id="loginform"]/input')))
34             #在输入用户名的位置输入用户名
35             login_name.send_keys(USER_NAME)
36             #在输入密码的输入框输入密码
37             login_pwd.send_keys(USER_PWD)
38             #点击登录按钮
39             button.click()
40             #分析已经登录的页面
41             #登录成功,开始分析页面!
42             #找到第一个frame标签(左侧栏)
43             browser.switch_to.frame("navframe")
44             #切换进去,执行Reboot Now这个按钮,
45             reboot_bo = web_wait.until(EC.presence_of_element_located((By.XPATH,'/html/body/dl[3]/dd/ul/li[2]/a')))
46             #执行操作,得到右边Reboot Now的重启按钮
47             reboot_bo.click()
48             #跳出当前的frame标签
49             browser.switch_to.default_content()
50             #找到执行完后右边的frame标签
51             browser.switch_to.frame('mainframe')
52             #进入标签后找到重启的按钮
53             reboot_boot = web_wait.until(EC.presence_of_element_located((By.XPATH,'//*[@id="adminform"]/table/tbody/tr[1]/td/input[2]')))
54             #执行重启的操作
55             reboot_boot.click()
56             #关闭浏览器
57             #完成后关闭
58             timee = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
59             s_log = "时间 %s  ip地址[%s]重启成功" %(timee,ip_arg)
60             Success_log(s_log)
61         except Exception as e:
62             timeee = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
63             r_log = "时间 %s  ip地址[%s]重启失败" %(timeee,ip_arg)
64             Error_log(r_log)
65     else:
66         pass
67 
68 def Error_log(args):
69     path = PATH+'\\error.txt'
70     with open(path, 'a+', encoding='utf-8') as file:
71         file.write('\n%s'%args)
72         file.close()
73 
74 def Success_log(args):
75     path = PATH+'\\success.txt'
76     with open(path,'a+',encoding='utf-8') as file:
77         file.write('\n%s'%args)
78         file.close()
79 
80 if __name__ == '__main__':
81     GET_Ip()
82     browser.quit()
源码

 

1、建立ip_list.txt文件,把ip地址如下面写进去。
172.16.5.2
172.16.5.1
172.16.5.5
172.16.5.50
172.16.5.51
2、本脚本提供了成功日志和错误日志
3、如果上线windows任务计划还需要有多地方需要注意,如有需要可以发邮件给我464774082@qq.com。
注意事项

 

github:https://github.com/MrLHD/Reboot_AP

 

Selenium操作:

 详细操作可以看我的好朋友凡哥的博客,这里我就不再重述。

 http://www.pythonsite.com/?p=188 

 

 

 

    

  

 


推荐阅读
  • pyecharts 介绍
    一、pyecharts介绍ECharts,一个使用JavaScript实现的开源可视化库,可以流畅的运行在PC和移动设备上,兼容当前绝大部 ... [详细]
  • 本文介绍了在Windows系统下安装Python、setuptools、pip和virtualenv的步骤,以及安装过程中需要注意的事项。详细介绍了Python2.7.4和Python3.3.2的安装路径,以及如何使用easy_install安装setuptools。同时提醒用户在安装完setuptools后,需要继续安装pip,并注意不要将Python的目录添加到系统的环境变量中。最后,还介绍了通过下载ez_setup.py来安装setuptools的方法。 ... [详细]
  • 通过Anaconda安装tensorflow,并安装运行spyder编译器的完整教程
    本文提供了一个完整的教程,介绍了如何通过Anaconda安装tensorflow,并安装运行spyder编译器。文章详细介绍了安装Anaconda、创建tensorflow环境、安装GPU版本tensorflow、安装和运行Spyder编译器以及安装OpenCV等步骤。该教程适用于Windows 8操作系统,并提供了相关的网址供参考。通过本教程,读者可以轻松地安装和配置tensorflow环境,以及运行spyder编译器进行开发。 ... [详细]
  • 最近在学Python,看了不少资料、视频,对爬虫比较感兴趣,爬过了网页文字、图片、视频。文字就不说了直接从网页上去根据标签分离出来就好了。图片和视频则需要在获取到相应的链接之后取做下载。以下是图片和视 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了如何通过conda安装Selenium的wheel文件,包括查看环境、卸载旧版本、下载新版本的wheel文件以及安装操作的步骤。同时提供了使用清华源的方法。 ... [详细]
  • Windows 7 部署工具DISM学习(二)添加补丁的步骤详解
    本文详细介绍了在Windows 7系统中使用部署工具DISM添加补丁的步骤。首先需要将光驱中的安装文件复制到指定文件夹,并进行挂载。然后将需要的MSU补丁解压并集成到系统中。文章给出了具体的命令和操作步骤,帮助读者完成补丁的添加过程。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • 本文总结了使用不同方式生成 Dataframe 的方法,包括通过CSV文件、Excel文件、python dictionary、List of tuples和List of dictionary。同时介绍了一些注意事项,如使用绝对路径引入文件和安装xlrd包来读取Excel文件。 ... [详细]
  • Linux下部署Symfoy2对app/cache和app/logs目录的权限设置,symfoy2logs
    php教程|php手册xml文件php教程-php手册Linux下部署Symfoy2对appcache和applogs目录的权限设置,symfoy2logs黑色记事本源码,vsco ... [详细]
  • 【爬虫训练场】:分页爬虫案例设计Demo,Python Flask与MySQL的完美连接
    网站类应用,一定离不开MySQL,所以本案例将带着大家学习一下,通过Flask调用MySQL数据,并实现分页呈现。类被称作蓝图,它是一个存储操作方法的容器,Flask可以通过Blu ... [详细]
  • 文章目录简介HTTP请求过程HTTP状态码含义HTTP头部信息Cookie状态管理HTTP请求方式简介HTTP协议(超文本传输协议)是用于从WWW服务 ... [详细]
author-avatar
小镇七公主
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有