当前位置 博文首页 > 孤寒者的博客:使用selenium实现QQ邮箱登录及发送邮件源码以及封

    孤寒者的博客:使用selenium实现QQ邮箱登录及发送邮件源码以及封

    作者:[db:作者] 时间:2021-07-25 22:01

    使用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