一、发送文本类型的邮件
踩坑:
1、使用selenium定位时,
定位时使用某一种方法无法定位到,所以多种定位交叉使用
''' 初级版本: 登录公司网易邮箱,向指定对象发送文本类型的邮件 思路: 1、登录邮箱 2、点击【写信】 3、输入收件人、标题、内容 4、点击【发送】 ''' import time import datetime from selenium import webdriver # 登录网易邮箱 def longin(url, username, password): # 进入登录页面 driver.get(url=url) # 登录 driver.find_element_by_id('accname').send_keys(username) # 输入用户名 driver.find_element_by_id('accpwd').send_keys(password) # 输入用户名 driver.find_element_by_class_name('loginbtn').submit() # 点击登录BTN # 写邮件并发送 def send_email(title, addressee, msg): try: # 先登录 longin(url, username, password) # 1、点击【写信】 driver.find_element_by_class_name('p-edit').click() ''' 2、输入收件人和标题 定位时使用某一种方法无法定位到,所以多种定位交叉使用 ''' driver.find_elements_by_class_name('right-inner')[0].find_element_by_name('to').find_element_by_tag_name( 'input').send_keys(addressee) # 输入收件人 driver.find_elements_by_class_name('right-inner')[0].find_element_by_name('to').find_element_by_tag_name( 'input').click() # 点击一下收件人输入框,避免下拉框遮挡主题输入框 driver.find_element_by_class_name('subject').find_element_by_tag_name('input').send_keys(title) # 输入主题 ''' 3、输入邮件内容(只有文本) 因为文本框是在ifrme内的,ifrme是内嵌的网页元素,所以要先进入到ifrme内,再操作 ''' iframe = driver.find_element_by_id('ueditor_0') # 先获取iframe driver.switch_to.frame(iframe) # 切换到iframe中 driver.find_element_by_xpath('/html/body').send_keys(msg) # 在ifrme中操作元素,因为没有id也没有class,所以使用xpath driver.switch_to.default_content() # 切换到iframe上之后,就无法对iframe以外的元素进行操作了,我们需要退出iframe再继续 # 点击【发送】 driver.find_element_by_id('main').find_element_by_class_name('g-mnc').find_element_by_xpath( '//*[@class="g-mnc"]/div[1]/div[1]/div[1]/div[1]').click() finally: time.sleep(3) driver.close() # 不管之前能否成功发送邮件,最后都关闭浏览器 if __name__ == '__main__': chrome = r'XXX/chromedriver' # chrome驱动文件的路径 url = 'https://qiye.163.com/login/?from=ym' # 邮箱地址 username = 'XXXXXXXXXXXXXXXXXXXX' # 邮箱账号 password = 'XXXXXXXXX' # 邮箱密码 title = '测试邮件,收到请忽略' # 邮件标题 addressee = 'XXXXXXXXXXXXXXXX' # 收件人邮箱 ''' 邮件内容 datetime.datetime.now() 当前时间小数点后还有6位 datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') 当前时间,只精确到秒 ''' msg = '最好等待5s再点击【发送】,否则可能会被定为垃圾邮件\n{}'.format(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')) driver = webdriver.Chrome(executable_path=chrome) # 获取到driver driver.implicitly_wait(3) # 设置全局的隐式等待,超出3s未找到元素,则报异常 send_email(title, addressee, msg)
结束。。。