起因:每天开机就要登录一遍校园网,虽然程序方面很简单,但是作为一名当代大学生就应该学会如何更加高效的偷懒。
背景:重庆某大学学生,使用的中国电信提供的校园网(沙冰电信死坑还贼贵)、谷歌浏览器(chrome牛皮)
那么我们开搞:
1.分析正常登录校园账号的流程:
- 登录校园网wifi —— 打开浏览器输入ip(有可能自动弹出)—— 输入账号、密码、选择身份类型
那么 我们可以通过脚本控制浏览器模拟用户登录的行文。 driver = webdriver.Chrome() # 这里使用的Chrome浏览器, driver.get('http://10.255.255.222/a70.htm') #这里输入你的校园网登录网址
2. 输入账户、密码、用户类型
万能 f12 调出前端代码
- 通过ISP_select 找到输入用户类型
input_tag1 = driver.find_element_by_name('ISP_select') #找到组合框,这个可以通过name直接找 input_tag1.send_keys('电信用户登录') #这是组合框,要选择你的宽带的运营商
再找 用户名和密码
找到用户名和密码
input_tag = driver.find_element_by_xpath("//form[@name='f3']/input[@name = 'DDDDD']") #通过xpath确定账号框位置 input_tag.send_keys("11111111111") #输入账号 input_tag2 = driver.find_element_by_xpath("//form[@name='f3']/input[@name = 'upass']") #通过xpath确定密码框位置 input_tag2.send_keys("222222222") #输入密码
3.检测网络连通
- 有时候当其他设备登录账号 在运行这个脚本就回有这个界面,于是乎就需要再次登录。
因此这里就需要增加一个判断网络是否连通,如果没连通就再跑一次 连接代码
def Ping(): backinfo = subprocess.call('ping www.baidu.com -n 1', shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) if backinfo: print('网络未连接') return 1 else: print("有网") return 2
总结
整体代码:
from selenium import webdriver from selenium.webdriver.common.keys import Keys import time import subprocess def spider(): driver = webdriver.Chrome() driver.get('http://baidu.com.htm') #这里输入你的校园网登录网址 time.sleep(2) input_tag1 = driver.find_element_by_name('ISP_select') #找到组合框,这个可以通过name直接找 input_tag1.send_keys('电信用户登录') #这是组合框,要选择你的宽带的运营商 input_tag = driver.find_element_by_xpath("//form[@name='f3']/input[@name = 'DDDDD']") #通过xpath确定账号框位置 input_tag.send_keys("111111111") #输入账号 input_tag2 = driver.find_element_by_xpath("//form[@name='f3']/input[@name = 'upass']") #通过xpath确定密码框位置 input_tag2.send_keys("2222222") #输入密码 input_tag2.send_keys(Keys.ENTER) #敲一下回车 time.sleep(10) #10秒后自动关闭浏览器 # 测试网络是否连通 def Ping(): backinfo = subprocess.call('ping www.baidu.com -n 1', shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) if backinfo: print('网络未连接') return 1 else: print("有网") return 2 if __name__ == '__main__': #运行上面封装的方法 # while True: spider() print("连接网络中·····") connection = Ping() #检测网络是否连通 if connection == 2 : print("ping") elif connection == 1: spider() exit()
过程中有一个挠头的 问题,就是死活无法调用到浏览器
码编写的过程也参考过csdn上面其他大佬的文章,由于编写过程没有刻意收集,这里无法著名参考出处,但十分感谢
近期有很多朋友通过私信咨询有关Python学习问题。为便于交流,点击蓝色自己加入讨论解答资源基地