配置文件:UiObjectMapSendMap.ini用来存放配置信息

GetOptionSendMail.py 用来读取配信息

#encoding=utf-8
from selenium.webdriver.support.ui import WebDriverWait
import ConfigParser
import os
from selenium import webdriver

class GetOption(object):
def __init__(self):
# 获取存放页面元素定位表达方式及定位表达式的配置文件所在绝对路径
# os.path.abspath(__file__)表示获取当前文件所在路径目录
self.uiObjMapPath = os.path.dirname(os.path.abspath(__file__))\
+ "\\UiObjectMapSendMail.ini"
#print self.uiObjMapPath

def getOption(self,sectionName, optionName):
try:
# 创建一个读取配置文件的实例
cf = ConfigParser.ConfigParser()
# 将配置文件内容加载到内存
cf.read(self.uiObjMapPath)
# 根据section和option获取配置文件中的配置信息
section = cf.get(sectionName, optionName)
#print "section:",section

except Exception, e:
raise e
else:
# 当页面元素被找到后,将该页面元素对象返回给调用者
return section

if __name__ == '__main__':
getoption=GetOption()
print getoption.getOption("mailaccount","username")

test.py脚本文件,用webdriver进入邮箱发邮件的脚本

#encoding=utf-8

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

 
class Visit163ByFirefox(unittest.TestCase):

    def setUp(self):
        #启动IE浏览器
        self.obj=GetOption()
        self.driver=webdriver.Firefox(executable_path='d:\\geckodriver')
        #self.driver = webdriver.Ie(executable_path = "e:\\IEDriverServer")

    def test_HandleIFrame(self):
        url = "https://mail.163.com/"
        # 访问自动以测试网页
        self.driver.get(url)
        try:
            username=self.obj.getOption("mailaccount","username")
            print "username:",username
            password=self.obj.getOption("mailaccount","password")
            print "password:",password
            attachname=self.obj.getOption("attachment","directory")
            print "attachname:",attachname
            mailtoaddress=self.obj.getOption("mailto","address")
            print "mailtoaddress:",mailtoaddress
            #显示等待
            wait=WebDriverWait(self.driver,15,0.2)
            #切换frame
            self.driver.switch_to.frame(self.driver.find_element_by_xpath("//*[@id='x-URS-iframe']"))
            #self.driver.switch_to.frame("x-URS-iframe")
            #显示等待获取用户名输入框元素
            name=wait.until(lambda x:x.find_element_by_xpath("//*[@class='j-inputtext dlemail']"))
            name.send_keys(username)
            #显示等待获取密码输入框元素
            passwd=wait.until(lambda x:x.find_element_by_xpath("//*[@class='j-inputtext dlpwd']"))
            passwd.send_keys(password)
            #登录
            login=wait.until(lambda x:x.find_element_by_id("dologin"))
            login.click()
            #切回到默认framae
            self.driver.switch_to.default_content()
            #获取写信按钮元素
            iwrite=wait.until(lambda x:x.find_element_by_xpath("//li[@id='_mail_component_74_74']/*[@class='oz0']"))
            iwrite.click()
            #获取收件人输入框元素
            receiver=wait.until(lambda x:x.find_element_by_xpath("//input[@class='nui-editableAddr-ipt'and @role='combobox']"))
            #receiver.click()
            receiver.send_keys(mailtoaddress)
            #获取主题输入框元素
            theme=wait.until(lambda x:x.find_element_by_xpath("//input[@class='nui-ipt-input' and @type='text' and @maxlength='256']"))
            #theme.click()
            theme.send_keys(u"这是夏晓旭的第一个自动化发邮件脚本!")
            #发送附件,找添加附件的元素,直接send_keys("目录")就可以,不用点击操作
            attach=wait.until(lambda x:x.find_element_by_xpath("//div[@class='by0']//input[@class='O0']"))
            attach.send_keys(attachname)
            #切到写信内容部分的frame
            self.driver.switch_to.frame(self.driver.find_element_by_xpath("//*[@class='APP-editor-iframe']"))
            #获取写信区域的元素
            editBox = wait.until(lambda x:x.find_element_by_xpath("/html/body"))
            editBox.click()
            editBox.send_keys(u'这是夏晓旭的第一个自动化发邮件脚本!')
            #切回到默认frame
            self.driver.switch_to.default_content()
            #获取发送按钮元素
            send=wait.until(lambda x:x.find_element_by_xpath("//*[@class='jp0']//*[@role='button']//*[.='发送']"))
            send.click()

        except TimeoutException, e:
            # 捕获TimeoutException异常
            print traceback.print_exc()
        except NoSuchElementException, e:
            # 捕获NoSuchElementException异常
            print traceback.print_exc()
        except Exception, e:
            # 捕获其他异常
            print traceback.print_exc()
 

if __name__ == '__main__':
    unittest.main()

执行过程:找到各个元素,输入字符,添加附件

发送成功

总结一下:

添加附件时,不是通过点击按钮,选择文件,而是找到添加附件按钮的元素,直接用send_keys("附件目录")这样来传就可以

读取配置文件的目的是实现程序和数据的分离,作用有两个:

一是方便维护所取的配置项,比如我可以把用户名和密码、邮箱地址在配置文件里随便改,程序不用动,直接去取你所配置的选项就可以了

二是可以给不懂代码逻辑的人员进行操作,不必要研究代码是怎么实现的,实现了程序和数据的隔离,方便使用

转载于:https://www.cnblogs.com/xiaxiaoxu/p/9216363.html

python webdriver 登录163邮箱发邮件加附件, 外加数据和程序分离,配置文件的方式...相关推荐

  1. Centos用mail命令登录163邮箱发邮件

    运维中需要有监控,多数情况下需要及时收到手机短信,来进行实时处理. mail命令可以通过简单配置,实现一键登录到163邮箱,并发送邮件到相应的邮箱.下面介绍配置方法: 首先是要将163邮箱的smtp功 ...

  2. python模拟登录163邮箱_python模拟登陆163邮箱并下载邮件内容(第三版代码片段)

    python模拟登陆163邮箱并下载邮件内容(第三版代码片段) 注意: 1 由于163邮箱有众多版本,所以登录请求URL,邮件URL等可能也不太一样,下面是163的简约3.0 2 代码缺乏错误处理能力 ...

  3. python浏览器自动化测试仪器_【松勤软件自动化测试】纯干货:基于Python+Selenium2登录163邮箱实例...

    一.业务流程: 1.打开浏览器,自动填写用户名和密码,登录成功后跳转到相应的页面. 2.验证相应页面的url与给定的url是否一致,如果一致则测试通过,如果不一致,则不通过. 3.另外,在执行过程中如 ...

  4. python模拟登录163邮箱_python模拟登录网易邮箱-阿里云开发者社区

    python模拟登录网易邮箱 #coding:utf-8 import urllib2,urllib import cookielib from bs4 import BeautifulSoup #设 ...

  5. Python+Selenium实现自动登录163邮箱导出邮件可按时间和内容进行筛选

    文章目录 描述 一.打码平台 二.实现方法 1. 过点选验证 2. 全部代码 总结 备注 描述 此脚本可以实现网易163邮箱的自动登录,自动过点选验证,按时间和关键字筛选内容,最后导出邮件 一.打码平 ...

  6. java 163邮箱发邮件_Java实现163邮箱发送邮件到QQ邮箱

    先创建一个maven的普通项目 添加依赖,附在文档末尾 其中几个注意的地方 主方法入口 有一个包下载不下来,手动导入下 准备一个配置文件和主方法类 针对配置文件编写一个类用来接收配置文件中的配置信息 ...

  7. php如何调用163邮箱发邮件,phpmailer使用163邮箱发送邮件例子

    phpmailer是一款免费的php邮件发送插件,我们可以利用phpmailer登录到我们指定的邮件然后再利用这个邮件给我们自动发邮件了,这个现在免费的邮箱像163,sina都支持,只是sina需要简 ...

  8. python自动化登录163邮箱发送邮件

    记录第一次自动化发送邮件成功 第一步 准备好 HTMLTestRunner.py文件放在下面这个路径 第二步 创建 "Mail163.yaml" 存放信息 testURL: 'ht ...

  9. python模拟登录163邮箱_Python实现模拟登录网易邮箱的方法示例

    本文实例讲述了Python实现模拟登录网易邮箱的方法.分享给大家供大家参考,具体如下: #coding:utf-8 import urllib2,urllib import cookielib fro ...

  10. php如何调用163邮箱发邮件,ThinkPHP3.2利用QQ邮箱/163邮箱通过PHPMailer发送邮件的方法...

    前言 我之前一直使用163邮箱发送需要处理的文件,但是如果操作过于频繁[或者有别的问题],会导致发送失败,相反现在用QQ的貌似还没出现过类似情况,不过QQ邮箱配置和163有一丢丢不一样,我还是贴一下, ...

最新文章

  1. 怎么将算法改成程序_多肉烂根怎么办?将土培改成水培,长势好,叶子变得更水灵...
  2. Python_位_成员_身份运算符
  3. 使用windows资源管理器打开jar
  4. 浅谈PPM (Project Portfolio Management)
  5. mac 黑窗口连接mysql_mac上终端起动MySQL的方法
  6. Hbase分布式列存储数据库
  7. 面试再问HashMap,求你把这篇文章发给他!
  8. 181016扇贝有道词霸每日一句
  9. python数据结构基础的重点内容_Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】...
  10. 天宝DINI03/莱卡DNA03等电子水准仪原始数据处理软件使用教程
  11. Overleaf 指南:30 分钟 LaTeX 入门
  12. android 圆形自定义进度条,Android自定义漂亮的圆形进度条
  13. 外虚内实是什么意思_俗语“五虚令人贫,五实人富贵”是什么意思?有道理吗?...
  14. 三角形外接圆与内切圆
  15. Tanzu Observability by Wavefront Spring Boot Starter
  16. 网站使用微信登录接口,所踩的坑...
  17. DuiLib : 做一个没有任务栏图标的Dialog
  18. CSS样式之实现水平排列块元素的几种方式
  19. php 静态配置文件问题,Nginx+PHP 配置漏洞:静态文件都可以当作 PHP 解析
  20. 四大Hybrid App移动开发平台对比

热门文章

  1. 系统学习数字图像处理之灰度变换和空域滤波
  2. jsp table 中多出行数据_数据分析 | 如何基于高斯曲线拟合15分钟生活圈距离衰减规律...
  3. “21天好习惯”第一期-20
  4. Linux主要的系统目录及其简单描述
  5. linux jenkins自动部署,【linux】【jenkins】自动化部署一 安装jenkins
  6. Hive查看执行计划
  7. Redis的两种持久化介绍与对比
  8. 如何向 Linux Kernel 提交 Patch
  9. FTPOperater
  10. 无需无线路由,将系统为win7的笔记本变成wifi的方法