帖代码的话,有点长。先写个目录。
一、工作需求
二、环境和依赖的库
三、细节介绍(好吧,现在回头看有点水,但还是解释解释)
四、完整代码
五、小感。
1、工作需求
刚学习PYTHON不到1个月,领导安排一个试探性的任务给我。
缘由: 为了**用户方便,将**邮箱挂在外网。**用户数量较多。**部分用户邮件内容敏感等原因。要求**用户修改原始密码。
需求:检查所有用户的密码,是否为原始密码passWord。并生成使用原始密码的用户列表。
2、环境和依赖的库
系统win7
语言是Python2.7
依赖 Selenium
需要注意的问题:
1、我已经有了一份**所有用户用户名,并且保存在"namelist.txt"中。
格式如下:()
好吧 我图删了。好多用户的名字都出来了
格式是,一个用户名一行。就不细写了。^_^
3、细节解释
1、将用户名列表读入程序中
n = open("namelist.txt","r") #读取namelist文件
n_txt = n.read()
n_list = n_txt.split("\n") #将所有用户名以list存放
n = open("namelist.txt","r") #读取namelist文件
n_txt = n.read()
n_list = n_txt.split("\n") #将所有用户名以list存放
2、创建存放使用原始密码的用户txt和列表(赶上**邮箱迁移,有的用户迁移了,有的没有迁移)
OPWname = open("OPWname.txt","w") #创建一个存放未修改密码,但已经迁移的用户。
worryname = open("worryname.txt","w") #创建一个存放未修改密码,但未经迁移的用户。
isOPW = [] #符合原始密码的用户集
isworry = [] #未迁移,密码为原始密码的用户
OPWname = open("OPWname.txt","w") #创建一个存放未修改密码,但已经迁移的用户。
worryname = open("worryname.txt","w") #创建一个存放未修改密码,但未经迁移的用户。
isOPW = [] #符合原始密码的用户集
isworry = [] #未迁移,密码为原始密码的用户
3、创建一个计数器
count = 0 #单纯的计数器
count = 0 #单纯的计数器
4、加载selenium
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
browser = webdriver.Firefox() # Get local session of firefox
browser.get("https://XXXX.XXXXX.com") # Load page 这里我打XXX了 哈哈 抱歉
#特别要说一下,在上一行执行结束后。真的打开了一个Friefox HOHO~~
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
browser = webdriver.Firefox() # Get local session of firefox
browser.get("https://XXXX.XXXXX.com") # Load page 这里我打XXX了 哈哈 抱歉
#特别要说一下,在上一行执行结束后。真的打开了一个Friefox HOHO~~
5、selenuim用到的命令
elem_name = browser.find_element_by_id("username") #和JS类似,取得某个元素。
elem_pw = browser.find_element_by_id("password") #这里分别取的是输入用户名和密码的input标签
elem_name.send_keys("cns/%s" % xname) #这里是在此元素下键入的内容。
elem_pw.send_keys(OPW + Keys.RETURN) #这里同上,特殊按钮可以用Keys.XXX
browser.delete_all_cookies() #浏览器清除cookies
browser.back() #浏览器向后跳转()
#browser.title = "Wang Xihao(coscobj) - Outlook Web App" #这行伪代码,取得当前浏览器title属性值
elem_name = browser.find_element_by_id("username") #和JS类似,取得某个元素。
elem_pw = browser.find_element_by_id("password") #这里分别取的是输入用户名和密码的input标签
elem_name.send_keys("cns/%s" % xname) #这里是在此元素下键入的内容。
elem_pw.send_keys(OPW + Keys.RETURN) #这里同上,特殊按钮可以用Keys.XXX
browser.delete_all_cookies() #浏览器清除cookies
browser.back() #浏览器向后跳转()
#browser.title = "Wang Xihao(coscobj) - Outlook Web App" #这行伪代码,取得当前浏览器title属性值
6、判断的依据。
## 登录成功的用户 browser.title = "Wang Xihao(xxxxx) - Outlook Web App"
if "- Outlook Web App" in browser.title: #这里是可以使用原始密码登录的用户。
##未迁移的用户,无法在新mailbj登录。但可以验证密码。browser.title = u"错误"
elif u"错误" in browser.title : #这里是已经登录成功,但是未迁移的用户显示。
## 这里是顺利登录,但是莫名其妙的跳转到语言选择。汗呀~~
## 于是抓取body属性的所有值,判断页面是否有"选择你要使用的语言"的字样。
elif "Outlook Web App" in browser.title:
bodytext = browser.find_element_by_tag_name("body")
if u"选择您要使用的语言" in bodytext.text: #这里也是使用原始密码登录成功。
"""
就是写入文本和list,下面细表
"""
else:
#排出以上所有可能title=="Outlook Web App",则密码为已修改(首页的title就是如此哦也)
#首页在输入密码错误后,会在当前页提示密码。
print(u"%d 密码已修改 %s" %(count,xname))
## 登录成功的用户 browser.title = "Wang Xihao(xxxxx) - Outlook Web App"
if "- Outlook Web App" in browser.title: #这里是可以使用原始密码登录的用户。
##未迁移的用户,无法在新mailbj登录。但可以验证密码。browser.title = u"错误"
elif u"错误" in browser.title : #这里是已经登录成功,但是未迁移的用户显示。
## 这里是顺利登录,但是莫名其妙的跳转到语言选择。汗呀~~
## 于是抓取body属性的所有值,判断页面是否有"选择你要使用的语言"的字样。
elif "Outlook Web App" in browser.title:
bodytext = browser.find_element_by_tag_name("body")
if u"选择您要使用的语言" in bodytext.text: #这里也是使用原始密码登录成功。
"""
就是写入文本和list,下面细表
"""
else:
#排出以上所有可能title=="Outlook Web App",则密码为已修改(首页的title就是如此哦也)
#首页在输入密码错误后,会在当前页提示密码。
print(u"%d 密码已修改 %s" %(count,xname))
7、打印当前信息。
print(isOPW)
print(isworry)
print("未修改密码,但已迁移的用户有 %d".decode("utf-8") % len(isOPW))
print("未修改密码,也未迁移的用户有 %d".decode("utf-8") % len(isworry))
OPWname.write("SumNumber %d" % len(isOPW))
worryname.write("SumNumber %d" % len(isworry))
print(isOPW)
print(isworry)
print("未修改密码,但已迁移的用户有 %d".decode("utf-8") % len(isOPW))
print("未修改密码,也未迁移的用户有 %d".decode("utf-8") % len(isworry))
OPWname.write("SumNumber %d" % len(isOPW))
worryname.write("SumNumber %d" % len(isworry))
8、有始有终
#别忘了关闭打开过的文本和浏览器。
worryname.close()
OPWname.close()
browser.close()
#别忘了关闭打开过的文本和浏览器。
worryname.close()
OPWname.close()
browser.close()
四、完整代码
#coding=utf-8
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
import time
start_time = time.time() #开始时间点
n = open("namelist.txt","r") #读取namelist文件
n_txt = n.read()
#n_list = [user for user in n] #将所有用户名以list存放
n_list = n_txt.split("\n") #将所有用户名以list存放
OPWname = open("OPWname.txt","w") #创建一个存放未修改密码,但已经迁移的用户。
worryname = open("worryname.txt","w") #创建一个存放未修改密码,但未经迁移的用户。
OPW = "passWord" #初始密码
isOPW = [] #符合密码的用户集
isworry = [] #未迁移,但密码为原始密码的用户
count = 0 #单纯的计数器
browser = webdriver.Firefox() # Get local session of firefox
browser.get("https://mail.xxxxx.com") # Load page
for xname in n_list :
time.sleep(0.2) #我担心它累着
count += 1 #计数器
elem_name = browser.find_element_by_id("username")
elem_pw = browser.find_element_by_id("password")
elem_name.send_keys("cns/%s" % xname)
elem_pw.send_keys(OPW + Keys.RETURN)
if "- Outlook Web App" in browser.title: ## 登录成功的用户 browser.title = "Wang Xihao(xxxxx) - Outlook Web App"
print(u"%d 密码未更改 %s" %(count,xname))
browser.delete_all_cookies()
browser.back()
isOPW.append(xname)
OPWname.write(xname+"\n")
continue
elif u"错误" in browser.title : ##未迁移的用户,无法在新mailbj登录。但可以验证密码。browser.title = u"错误"
print(u"%d 未迁移 %s" %(count,xname))
browser.delete_all_cookies()
browser.back()
isworry.append(xname)
worryname.write(xname+"\n")
continue
elif "Outlook Web App" in browser.title:
bodytext = browser.find_element_by_tag_name("body")
if u"选择您要使用的语言" in bodytext.text:
print(u"%d 选择语言 %s" %(count,xname))
browser.delete_all_cookies()
browser.back()
isOPW.append(xname)
OPWname.write(xname+"\n")
continue
else:
print(u"%d 密码已修改 %s" %(count,xname))
continue
else:
print("%d False %s" %(count,xname)) #如果再有意外,好吧,那时候没学logger
browser.delete_all_cookies()
browser.back()
continue
print(isOPW)
print(isworry)
print("未修改密码,但已迁移的用户有 %d".decode("utf-8") % len(isOPW))
print("未修改密码,也未迁移的用户有 %d".decode("utf-8") % len(isworry))
OPWname.write("SumNumber %d" % len(isOPW))
worryname.write("SumNumber %d" % len(isworry))
worryname.close()
OPWname.close()
browser.close()
end_time = time.time()
print(end_time-start_time)
#coding=utf-8
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
import time
start_time = time.time() #开始时间点
n = open("namelist.txt","r") #读取namelist文件
n_txt = n.read()
#n_list = [user for user in n] #将所有用户名以list存放
n_list = n_txt.split("\n") #将所有用户名以list存放
OPWname = open("OPWname.txt","w") #创建一个存放未修改密码,但已经迁移的用户。
worryname = open("worryname.txt","w") #创建一个存放未修改密码,但未经迁移的用户。
OPW = "passWord" #初始密码
isOPW = [] #符合密码的用户集
isworry = [] #未迁移,但密码为原始密码的用户
count = 0 #单纯的计数器
browser = webdriver.Firefox() # Get local session of firefox
browser.get("https://mail.xxxxx.com") # Load page
for xname in n_list :
time.sleep(0.2) #我担心它累着
count += 1 #计数器
elem_name = browser.find_element_by_id("username")
elem_pw = browser.find_element_by_id("password")
elem_name.send_keys("cns/%s" % xname)
elem_pw.send_keys(OPW + Keys.RETURN)
if "- Outlook Web App" in browser.title: ## 登录成功的用户 browser.title = "Wang Xihao(xxxxx) - Outlook Web App"
print(u"%d 密码未更改 %s" %(count,xname))
browser.delete_all_cookies()
browser.back()
isOPW.append(xname)
OPWname.write(xname+"\n")
continue
elif u"错误" in browser.title : ##未迁移的用户,无法在新mailbj登录。但可以验证密码。browser.title = u"错误"
print(u"%d 未迁移 %s" %(count,xname))
browser.delete_all_cookies()
browser.back()
isworry.append(xname)
worryname.write(xname+"\n")
continue
elif "Outlook Web App" in browser.title:
bodytext = browser.find_element_by_tag_name("body")
if u"选择您要使用的语言" in bodytext.text:
print(u"%d 选择语言 %s" %(count,xname))
browser.delete_all_cookies()
browser.back()
isOPW.append(xname)
OPWname.write(xname+"\n")
continue
else:
print(u"%d 密码已修改 %s" %(count,xname))
continue
else:
print("%d False %s" %(count,xname)) #如果再有意外,好吧,那时候没学logger
browser.delete_all_cookies()
browser.back()
continue
print(isOPW)
print(isworry)
print("未修改密码,但已迁移的用户有 %d".decode("utf-8") % len(isOPW))
print("未修改密码,也未迁移的用户有 %d".decode("utf-8") % len(isworry))
OPWname.write("SumNumber %d" % len(isOPW))
worryname.write("SumNumber %d" % len(isworry))
worryname.close()
OPWname.close()
browser.close()
end_time = time.time()
print(end_time-start_time)
五、小感
时至今日,回看7月写的东西真是太好玩了。过程中修修补补。思路是摸索着往前进,碰壁了再回头。
还记得是那夜晚上8点40,运行了好几遍都顺利。只是效率有些慢。700+用户,一共用了15分钟左右。
Selenium真的是一个很强大的东西。我如果我早点接触他的话。吼吼 小时候玩的浏览器江湖,我就是无敌的存在了哈哈哈哈。跑题了。
Selenium我的理解是模拟浏览器的所有操作。真的是一个很强大的存在。希望在以后的道路中,可以再次和他相遇。
我觉得现在我所缺少的就是思路。代码还有肯定还有不足。万望指正,不吝赐教。