selenium+python实现qq邮箱的自动发送

从登录到自动发送qq邮件

  • qq邮箱登录注意问题
    账户密码登录框是写在一个iframe上的,所以我们要先进入iframe中才能定位到下面的两个输入框和登录按钮。从下图我们可以看到iframe=login_frame,我们可以是用driver.switch.to_frame(“login_frame”)进入iframe中。接下来的两个输入框和登录按钮都有id属性,我们只需要用driver.find_element_by_id(“xxx”)就可以定位到元素。
    记得退出iframe,不然定位后面的所有元素都会失败(切记),退出iframe的话我们可以写driver.switch_to_default_content()来实现(个人发现to后面用“.”还是“_”符号,都可以将后面显示出来)。大家可以尝试下,把这句话省略,接着定位下面的元素。

在这里插入图片描述

  • 主页面注意事项
    主页面上左上角的“写信”按钮,你右击是不会显示查看元素的,第一种方法,我们首先在页面其他地方右击,接着选中查看元素,然后用查看器左边的那个鼠标按钮去点击“写信”按钮。就可以查看到。第二种方法,直接根据“写信”两个字去定位元素。我们可以这样driver.find_element_by_link_text(“写信”)

  • 写信页面注意事项
    写信页面都写在iframe里面,所以要进入iframe中,然后定位收件人的输入框,我们可以从下面的页面代码中看到class的值有很多地方都用到(不是唯一),所有我们相对路径的方法,driver.find_element_by_xpath("//*[@id=“toAreaCtrl”]//div[2]/input")。这样就可以解决了。
    正文下面的文本框注意四点,第一点,文本框在一个iframe中;第二点,文本框没有任何的属性值,所以我们可以使用HTML标签名定位,driver.find_element_by_tag_name(“body”);第三点文本框需要先点击(click),在编写(send_keys),如果没有先点击在编写,那么你send_keys(“xxxx”)内容会放在主题后面的文本框中。第四点,退出iframe,然后再进入iframe=“mainFrame”,因为退出的话就是所有的iframe都退出。

  • 完整脚本

from selenium import webdriver
import unittest,time,traceback
from selenium.common.exceptions import TimeoutException,NoSuchElementException


class TestDemo(unittest.TestCase):
    def setUp(self):
        self.driver=webdriver.Firefox(executable_path='f:\\geckodriver')


    def test_sendqqemail(self):
        try:
            url = 'https://mail.qq.com/'
            self.driver.get(url)
            self.driver.maximize_window()
            self.driver.switch_to_frame("login_frame")
            self.driver.find_element_by_id("u").send_keys("用户名")
            self.driver.find_element_by_id("p").send_keys("密码")
            self.driver.find_element_by_id("login_button").click()
            time.sleep(5)
            self.driver.switch_to.default_content() #退出iframe,如果没这句话后面的元素定位都会出错
            self.driver.find_element_by_id('composebtn').click()
            #写信模块都在iframe=mainFrame页面上
            self.driver.switch_to_frame("mainFrame")
            time.sleep(3)
            self.driver.find_element_by_xpath("//*[@id='toAreaCtrl']/div[2]/input").send_keys("收件人")
            #定位主题
            self.driver.find_element_by_xpath('//input[@id="subject"]').send_keys("主题")
            #正文编写iframe中
            self.driver.switch_to_frame(self.driver.find_element_by_class_name("qmEditorIfrmEditArea"))
            #self.driver.find_element_by_xpath("/html/body").send_keys('你好,再见')
            #定位正文
            content=self.driver.find_element_by_tag_name("body")
            #必须click(),不然会写到主题里面
            content.click()
            content.send_keys("正文内容")
            time.sleep(3)
            self.driver.switch_to.default_content()
            self.driver.switch_to_frame("mainFrame")
            #定位发送按钮
            self.driver.find_element_by_xpath('//a[.="发送"]').click()
        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()





  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值