关于qq登录并发送邮件:普通方法和显示等待的方式

way1
练习:模拟发送邮件!

from selenium import webdriver

import time

from selenium.webdriver import ActionChains

from selenium.webdriver.common.keys import Keys

def login_qq():

driver=webdriver.Chrome(executable_path="d:\\chromedriver.exe")

url="http://mail.qq.com"

driver.get(url)

login_frame=driver.find_element_by_id("login_frame")

driver.switch_to.frame(login_frame)

link_pass = driver.find_element_by_id('switcher_plogin')

time.sleep(2)

usernameBox=driver.find_element_by_id("u")

passBox=driver.find_element_by_id("p")



usernameBox.clear()

passBox.clear()

usernameBox.send_keys("XX@qq.com")

passBox.send_keys("111")

time.sleep(1)

btnLogin=driver.find_element_by_id("login_button")

btnLogin.click()



time.sleep(3)

#点击写信:

writeBox=driver.find_element_by_id("composebtn")

writeBox.click()



#切换到frame

mframe=driver.find_element_by_xpath("//*[@id='mainFrame']")

driver.switch_to.frame(mframe)

time.sleep(2)

#直接输入发送人的输入框

address=driver.find_element_by_id("toAreaCtrl")

time.sleep(1)

#填写收件人,不加click()

ActionChains(driver).move_to_element(address).send_keys(‘1581471139@qq.com’).perform()

#添加附件

driver.find_element_by_name("UploadFile").send_keys("d:\\urls.txt")

time.sleep(2)



#在正文添加内容,先切到正文的frame位置

content=driver.find_element_by_xpath("//div[@id='QMEditorArea']//iframe")

driver.switch_to.frame(content)

time.sleep(1)

driver.find_element_by_xpath("//div").send_keys(u"我是测试!")

#driver.find_element_by_id("QMEditorArea").send_keys(u"我是测试!")

time.sleep(3)

#返回到上一级父iframe

driver.switch_to.parent_frame()

driver.find_element_by_xpath("//a[@name='sendbtn' and @tabindex='9']").click()

time.sleep(2)

driver.quit()

if name==“main”:

login_qq()

1、switch_to.frame()方法来切换frame:reference是传入的参数,用来定位frame,传入id、name、index以及selenium的WebElement对象

2、driver.switch_to.frame(reference)

从子frame切回到父frame,而不用我们切回主文档再切进来

3、driver.switch_to.parent_frame()

切到frame中之后,我们便不能继续操作主文档的元素,这时如果想操作主文档内容,则需切回主文档。

driver.switch_to.default_content()

way2:

encoding=utf-8

from selenium import webdriver
import unittest, time, traceback
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException, NoSuchElementException
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChains

class TestDemo(unittest.TestCase):

def setUp(self):
    # 启动Firefox浏览器
    # self.driver = webdriver.Firefox(executable_path="d:\\geckodriver")
    # self.driver = webdriver.Ie(executable_path = "d:\\IEDriverServer")
    self.driver = webdriver.Chrome(executable_path="d:\\chromedriver")

def test_SohuMailSendEMail(self):
    url = "https://mail.qq.com/"
    # 访问搜狐邮箱登录页
    self.driver.get(url)
    time.sleep(3)
    try:
        login_frame = self.driver.find_element_by_id("login_frame")
        self.driver.switch_to.frame(login_frame)
        self.driver.find_element_by_id("switcher_plogin").click()
        userName = self.driver.find_element_by_id('u')
        userName.clear()
        userName.send_keys("XX@qq.com")
        passWord = self.driver.find_element_by_id('p')
        passWord.clear()
        passWord.send_keys("111")
        login = self.driver.find_element_by_id('login_button')
        login.click()
        # 这里是超时的影响
        wait = WebDriverWait(self.driver,10)
        # 显示等待,确定页面是否成功登录并跳转到登录成功后的首页
        wait.until(EC.element_to_be_clickable((By.ID, 'composebtn')))
        self.driver.find_element_by_id('composebtn').click()
        time.sleep(2)
        iframe = self.driver.find_element_by_id("mainFrame")
        self.driver.switch_to.frame(iframe)
        receiver = self.driver.find_element_by_id('toAreaCtrl')
        # 输入收件人
        ActionChains(self.driver).move_to_element(receiver).send_keys('1581471139@qq.com').perform()
        time.sleep(2)
        subject = self.driver.find_element_by_id("subject")
        # 输入邮件标题
        subject.send_keys("一封测试邮件")
        time.sleep(3)
         #添加附件
        self.driver.find_element_by_name("UploadFile").send_keys("d:\\urls.txt")
        time.sleep(2)
        #添加正文
        content=self.driver.find_element_by_xpath("//div[@id='QMEditorArea']//iframe")
        self.driver.switch_to.frame(content)
        self.driver.execute_script("document.getElementsByTagName('body')[0].innerHTML='<b>邮件的正文内容<b>;'")
        time.sleep(3)
       #切出页面,回到上一级页面
        self.driver.switch_to.parent_frame()
        #self.driver.switch_to.default_content()
        self.driver.find_element_by_xpath("//a[@name='sendbtn' and @tabindex='9']").click()
        wait.until(EC.visibility_of_element_located((By.XPATH,'//span[.="发送成功"]')))
        print("邮件发送成功!")
    except TimeoutException:
        print("显示等待页面元素超时")
    except NoSuchElementException:
        print("寻找的页面元素不存在:",traceback.print_exc())
    except Exception:
        print(traceback.print_exc())

def tearDown(self):
    self.driver.quit()

if name==“main”:
unittest.main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值