嗯……关于数据以字典方式存储的读取,这个在前面已经练习过了,这次试试 txt格式,感觉也是比较常见的
平时从某处导出或者复制出来的数据文件可能是这样的:
#存放帐号和密码的文件 user_list.txt
帐号 密码
1234567890 abcdefg123
1234567890 abcdefg123
1234567890 abcdefg123
1234567890 abcdefg123
1234567890 abcdefg123
1234567890 abcdefg123
首行显示此列名称,后面就是一堆数据,导出的时候是不太整齐的,需要手动整理一下,相邻的数据用一个空格隔开,多运行几次用 “_” 替换 “__”就可以了,即 连续两个空格替换成一个空格,循环几次,就整齐了
#主要代码模块的文件名 qq_mail_login.py
from selenium import webdriver
import time
from selenium.webdriver.support.ui import WebDriverWait
def get_web(): #打开测试的网页
driver = webdriver.Firefox()
driver.get(‘https://mail.qq.com/‘)
return driver
def get_login(driver): #打开登录窗
WebDriverWait(driver, 10).until(lambda driver:driver.find_element_by_xpath(‘/html/body/div/div[1]/a‘))
driver.switch_to.frame(‘login_frame‘)
driver.find_element_by_id(‘switcher_plogin‘).click()
def input_login(driver, account, password): #输入帐号和密码,点击登录
ele_account = driver.find_element_by_id(‘u‘)
ele_account.clear()
ele_account.send_keys(account)
ele_account.send_keys(‘@qq.com‘)
ele_password = driver.find_element_by_id(‘p‘)
ele_password.clear()
ele_password.send_keys(password)
driver.find_element_by_xpath(‘//*[@id="login_button"]‘).click()
time.sleep(10)
def check_login(driver, account): #登录后,验证是否登录成功,并报告
try:
driver.switch_to.default_content()
driver.switch_to.frame(‘mainFrame‘)
ele = driver.find_element_by_xpath(‘/html/body/div[2]/div/ul/li[1]/div[2]/a‘)
print(‘登录账号‘,account,‘成功!‘)
except:
print(account,‘登录失败!‘)
if __name__ == "__main__":
with open(‘user_list.txt‘, ‘r‘) as f: #打开文件
content = f.readline() #读取第一行
while content:
content = f.readline() #每此循环读下一行
info = content.split() #将一行数据以空格为分隔符,进行分割,得到的作为元素存入列表 info
if info: #如果列表不为空,则进行以下操作
account = info[0] #列表 info 第一个元素作为 account
password = info[1] #列表 info 第二个元素作为 password
print(‘账号‘, account, ‘正在登录中……‘) #开始登录某帐号提示
driver = get_web() #打开网页
get_login(driver) #打开登陆窗
input_login(driver, account, password) #输入帐号和密码,点击登录
check_login(driver, account) #验证登录是否成功,并报告
driver.quit() #关闭浏览器
time.sleep(3) #等待三秒,然后进行下一次循环