当前位置 博文首页 > 孤寒者的博客:使用selenium实现QQ邮箱登录及发送邮件源码以及封
import time
from selenium import webdriver
# executable_path参数是与你所用浏览器对应的浏览器引擎绝对路径
driver=webdriver.Chrome(executable_path="C:\my\Chrome_guge\chromedriver.exe")
url = 'https://mail.qq.com/cgi-bin/loginpage'
driver.get(url)
time.sleep(2)
######## 登录
# 浏览器窗口最大化
driver.maximize_window()
driver.switch_to.frame('login_frame') # 转向到登录frame中
driver.find_element_by_xpath('//*[@id="switcher_plogin"]').click()
time.sleep(2)
driver.find_element_by_xpath('//*[@id="u"]').send_keys('QQ号@qq.com')
time.sleep(2)
driver.find_element_by_xpath('//*[@id="p"]').send_keys('密码')
time.sleep(2)
driver.find_element_by_xpath('//*[@id="login_button"]').click()
time.sleep(10)
# 断言登录成功
assert '退出' in driver.page_source
#########写信
# 单击写信按钮
time.sleep(2)
driver.find_element_by_link_text("写信").click()
# 切换到写信的页面mainFrame
driver.switch_to.frame('mainFrame')
# 输入收件人
time.sleep(2)
driver.find_element_by_xpath("//*[@id='toAreaCtrl']/div[2]/input").send_keys('收件人QQ号@qq.com')
# 输入主题
time.sleep(2)
driver.find_element_by_id('subject').send_keys('你的标题!')
# 输入正文
# 进入输入内容的iframe,注意:这个iframe是嵌套在写信的页面mainFrame里的,所以不用返回顶层,直接就可以定位到!
time.sleep(2)
frame = driver.find_element_by_xpath("//iframe[@class='qmEditorIfrmEditArea']")
driver.switch_to.frame(frame)
# 输入邮件内容:
# 注意:问题出在文本放在div标签中间!
# 解决:你往父级找一找:有没有div元素有一个contenteditable="true"的属性,说明这个文本框采用的是全局变量,你只需要给这个div send_keys()就ok了!
driver.find_element_by_xpath("//body").send_keys('信的内容!')
# 进入frame操作结束后就返回顶层
driver.switch_to.default_content()
# 再次进入写信的页面,这里面包含发送按钮
driver.switch_to.frame('mainFrame')
######## 发送
# 点击发送按钮
time.sleep(2)
driver.find_element_by_xpath("//*[@id='toolbar']/div/a[1]").click()
time.sleep(2)
# 进入frame操作结束后就返回顶层
driver.switch_to.default_content()
# 断言发送成功
assert u"再写一封" in driver.page_source
# 关闭浏览器
driver.quit()
# -*- encoding:utf-8 -*-
from selenium import webdriver
import time
class QQmail():
def __init__(self):
self.driver = webdriver.Chrome(executable_path="C:\my\Chrome_guge\chromedriver.exe")
self.url = "https://mail.qq.com/cgi-bin/loginpage"
self.username = "发件人邮箱"
self.password = "发件人密码"
self.sender = "收件人邮箱"
self.title = u"信的标题"
self.content = u"信的内容"
def login(self):
'''
login QQ-mail
:return: None
'''
driver = self.driver
driver.get(self.url)
driver.maximize_window()
driver.switch_to.frame('login_frame')
time.sleep(2)
driver.find_element_by_xpath('//*[@id="switcher_plogin"]').click()
time.sleep(2)
driver.find_element_by_xpath('//*[@id="u"]').send_keys(self.username)
time.sleep(2)
driver.find_element_by_xpath('//*[@id="p"]').send_keys(self.password)
time.sleep(2)
driver.find_element_by_xpath('//*[@id="login_button"]').click()
time.sleep(6)
# 断言登录成功
assert '退出' in driver.page_source
def writmail(self):
"""
write QQ-mail
:return:
"""
driver = self.driver
driver.find_element_by_link_text("写信").click()
driver.switch_to.frame("mainFrame")
time.sleep(2)
driver.find_element_by_xpath("//div[@id='toAreaCtrl']/div[2]/input").send_keys(self.sender)
time.sleep(2)
driver.find_element_by_id("subject").send_keys(self.title)
# 输入正文
time.sleep(2)
frame = driver.find_element_by_xpath("//iframe[@class='qmEditorIfrmEditArea']")
driver.switch_to.frame(frame)
driver.find_element_by_xpath("//body").send_keys(self.content)
# 进入frame操作结束后就返回顶层
driver.switch_to.default_content()
def sendmail(self):
'''
send email
'''
driver = self.driver
driver.switch_to.frame('mainFrame')
time.sleep(2)
driver.find_element_by_xpath("//*[@id='toolbar']/div/a[1]").click()
time.sleep(2)
# 断言发送成功
assert u"再写一封" in driver.page_source
# 进入frame操作结束后就返回顶层
driver.switch_to.default_content()
def exit(self):
'''
exit QQ-mail
:return: QQ-mail login page
'''
driver = self.driver
time.sleep(2)
driver.find_element_by_link_text("退出").click()
time.sleep(2)
driver.find_element_by_link_text("重新登录").click()
def run(self):
self.login()
self.writmail()
self.sendmail()
self.exit()
if __name__ == '__main__':
qqmail = QQmail()
qqmail.run()
cs