帖代码的话,有点长。先写个目录。

、工作需求

、环境和依赖的库

、细节介绍(好吧,现在回头看有点水,但还是解释解释)

四、完整代码

五、小感。



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我的理解是模拟浏览器的所有操作。真的是一个很强大的存在。希望在以后的道路中,可以再次和他相遇。

    我觉得现在我所缺少的就是思路。代码还有肯定还有不足。万望指正,不吝赐教。