1 min read

python3使用selenium让小米路由器自动重新拨号

第一次在python3用selenium,简单记一下。

环境:win7/python3.5/selenium/小米路由器青春版(R1CL)

selenium安装:

pip install selenium

本来想用requests的。不知道为啥失败了。小米路由器好象光提交密码和用户名不行。就直接用selenium了,貌似效果不错,下面是代码:

#!/usr/bin/python
# -*- coding: utf-8 -*-

from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait # available since 2.4.0
import time

#使用chrome模拟操作
#需要下载chrome driver,exe放到和脚本一个目录就行了
#chrome driver下载地址:http://chromedriver.storage.googleapis.com/index.html
options = webdriver.ChromeOptions()  #运行配置,没有的话,会有黄条提示
options.add_experimental_option("excludeSwitches", ["ignore-certificate-errors"])
driver = webdriver.Chrome(chrome_options=options)
#driver = webdriver.Chrome()  ##可以替换为IE(), FireFox()

#路由器地址
driver.get("http://192.168.1.1/")
#查找password密码输入框
inputElement = driver.find_element_by_name("password")
#输入路由器密码,mima换成你自己的路由器密码
inputElement.send_keys("mima")
#提交登录
inputElement.submit()

#10秒内,每500毫秒查询一次,
#查找名为"常用设置"的超链接,网页刷新出来后就进行下一步操作
WebDriverWait(driver, 10).until(lambda driver : driver.find_element_by_link_text(u'常用设置') )
#点击页面上的"常用设置"
driver.find_element_by_link_text(u'常用设置').click()

#同上
WebDriverWait(driver, 10).until(lambda driver : driver.find_element_by_link_text(u'上网设置') )
driver.find_element_by_link_text(u'上网设置').click()

#同上
WebDriverWait(driver, 10).until(lambda driver : driver.find_element_by_link_text(u'断开') )
#获取IP地址。
#获取条件:<div id="wanStatus"><div><ul><li><li><span class="v">1.1.1.1</span></li>...略
#li[3]为第三个li标签。
old_ip = driver.find_element_by_xpath("//div[@id='wanStatus']/div/ul/li[3]/span[@class='v']").text
print("旧IP:"+old_ip+'\n')
driver.find_element_by_link_text(u'断开').click()

#同上
WebDriverWait(driver, 10).until(lambda driver : driver.find_element_by_link_text(u'立即连接') )
#获取超链接地址示例:driver.find_element_by_link_text(u'立即连接').get_attribute("href")
driver.find_element_by_link_text(u'立即连接').click()

#同上
WebDriverWait(driver, 10).until(lambda driver : driver.find_element_by_link_text(u'断开') )
new_ip = driver.find_element_by_xpath("//div[@id='wanStatus']/div/ul/li[3]/span[@class='v']").text
print("新IP:"+new_ip+"\n")

#退出浏览器
driver.quit()

selenium还是挺简单的,顺便记一下点击超链接后在新建的窗口继续操作方法。

#等待窗口新建完成
WebDriverWait(driver, 10).until(lambda driver: len(driver.window_handles) == 2)
#跳转到新窗口
driver.switch_to_window(driver.window_handles[1])
#等待页面刷新完成
WebDriverWait(driver, 10).until(lambda driver : driver.find_element_by_link_text(u'用户中心') )
#点击按钮
driver.find_element_by_link_text(u'用户中心').click()

操作页面的IFRAME里的内容:

driver.switch_to_frame('ptlogin_iframe')