博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python爬虫之初始Selenium
阅读量:4347 次
发布时间:2019-06-07

本文共 5589 字,大约阅读时间需要 18 分钟。

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         pass67 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.2172.16.5.1172.16.5.5172.16.5.50172.16.5.512、本脚本提供了成功日志和错误日志3、如果上线windows任务计划还需要有多地方需要注意,如有需要可以发邮件给我464774082@qq.com。
注意事项

 

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

 

Selenium操作:

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

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

 

 

 

    

  

 

转载于:https://www.cnblogs.com/lei0213/p/7380333.html

你可能感兴趣的文章
option value的值可以有空格 再试试吧
查看>>
.htaccess to httpd.conf
查看>>
node.js 基础学习笔记2
查看>>
hadoop中常见元素的解释
查看>>
BZOJ-1497 最大获利
查看>>
4-4 修改文件
查看>>
并发编程(十):AQS
查看>>
条件注释判断浏览器版本<!--[if lt IE 9]>
查看>>
Comparison among several SGD derivation
查看>>
ModelAndView同时向页面传递多个参数
查看>>
samba 配置参数详解
查看>>
python基础09_文件操作
查看>>
mvn install selenium依赖包
查看>>
关于SQL的相关笔记【长期更新,只发一帖】
查看>>
linux awk命令详解
查看>>
android:id="@+id/button1" 与 android:id="@id/button1" 区别 @string
查看>>
手把手玩转win8开发系列课程(11)
查看>>
Linux Namespace : User
查看>>
交换两个整形变量的数值
查看>>
Linux----常用操作
查看>>