使用Selenium发邮件附件

发邮件可以使用SMTP协议实现程序去发送,但附件的不能太大,一般不超过20M。
以下使用Selenium模拟发送邮件,跳过这个限制,网上找了很多资料,都没有完整实现的,那么自己实现一个,以下代码用Python完成:

import sys
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
import win32gui
import win32con# 在这里导入浏览器设置相关的类
from selenium.webdriver.edge.options import Options# 无可视化界面设置 #edge_options = Options()
# 使用无头模式
edge_options.add_argument('--headless')
# 禁用GPU,防止无头模式出现莫名的BUGdriver = webdriver.Edge()
url = 'http://mail.163.com/'
driver.get(url)
driver.maximize_window()
acount_num="请用自已的账号,不要抄"
passwd_str="请用自已的密码,不要抄"
# 163登陆框是使用iframe进行嵌套的,所以需要先切换到该iframe
driver.switch_to.frame(0)
acount = driver.find_element(By.NAME,'email')
acount.clear()
acount.send_keys(acount_num)passwd = driver.find_element(By.NAME,'password')
passwd.clear()
passwd.send_keys(passwd_str)# 30天内免登陆
toEdit=driver.find_element(By.XPATH,"/html/body/div[2]/div[2]/div[2]/form/div/div[9]/div")
ActionChains(driver).move_to_element(toEdit).click().pause(2).perform()
try:time.sleep(3)click_button = driver.find_element(By.ID,'dologin')click_button.click()time.sleep(60)
except:print("except");# 点写邮件
#driver.execute_script("$(\"#_mail_component_76_76\").click()")
toEdit=driver.find_element(By.XPATH,"/html/body/div[1]/nav/div[1]/ul/li[2]")
ActionChains(driver).move_to_element(toEdit).click().pause(2).perform()
time.sleep(3)
# 收件人
toEdit=driver.find_element(By.XPATH,"/html/body/div[2]/div[1]/div[2]/div[1]/section/header/div[1]/div[1]/div/div[2]")
# 收件人的地址,要改哦
ActionChains(driver).move_to_element(toEdit).click().pause(2).send_keys("tomail@qq.com").perform()#主题
toEdit=driver.find_element(By.XPATH,"/html/body/div[2]/div[1]/div[2]/div[1]/section/header/div[2]/div[1]/div/div/input")
ActionChains(driver).move_to_element(toEdit).click().pause(2).send_keys("Erp-Data").perform()# 附件
toEdit=driver.find_element(By.XPATH,"/html/body/div[2]/div[1]/div[2]/div[1]/section/header/div[3]/div[1]/div[2]")
ActionChains(driver).move_to_element(toEdit).click().pause(2).perform()dialog = win32gui.FindWindow('#32770', u'打开')  # 对话框
ComboBoxEx32 = win32gui.FindWindowEx(dialog, 0, 'ComboBoxEx32', None) 
ComboBox = win32gui.FindWindowEx(ComboBoxEx32, 0, 'ComboBox', None)
Edit = win32gui.FindWindowEx(ComboBox, 0, 'Edit', None)  # 上面三句依次寻找对象,直到找到输入框Edit对象的句柄
button = win32gui.FindWindowEx(dialog, 0, 'Button', None)  # 确定按钮Buttonwin32gui.SendMessage(Edit, win32con.WM_SETTEXT, None, 'D:\Code\GoPathNew\src\sendmail\main.go')  # 往输入框输入绝对地址,这里是附件,要改哦
win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button)  # 按打开按钮# 内容
driver.switch_to.frame(driver.find_element(By.XPATH,"//iframe[contains(@class,'APP-editor-iframe')]"))
driver.find_element(By.XPATH,"/html/body").send_keys("xxx");driver.switch_to.default_content()toEdit=driver.find_element(By.XPATH,"/html/body/div[2]/div[1]/div[2]/header/div/div[1]/div/span[2]")
ActionChains(driver).move_to_element(toEdit).click().pause(2).perform()

另外还有C# 版本的:

https://download.csdn.net/download/aa_qq110/88508640

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/135435.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WM 报错不含领货点存储类型的存储类型需要部分搁板管理

试图为SAP新建堆放策略维B标准存储类型系统报错如下: 不含领货点存储类型的存储类型需要部分搁板管理 加个P类型的,先保存,然后再改 解决方案: 进入如下配置路径, 新增一个配置条目,如上图示,…

ci-cd的流程

1、项目在gitlab上,从gitlab上使用git插件获取源码,构建成war包,所以使用tomcat作为运行环境 发布 :使用maven插件发布,使用ssh连接。

小米6安装Ubuntu Touch系统也不是很难嘛

序言 这个文章是用来解说,小米6如何安装Ubuntu Touch系统 正文 安装这个系统需要注意的几点 1.手机必须已经解BL锁 2.没了 安装步骤 先双击打开压缩包查看,按照第一步第二步来进行执行,下面是解压图片 第一步 1.打开第一个文件夹 复制刷入rec的命令.txt里面的内容,然后打开红…

HTTP-HTTPS区别详解

一、HTTP协议 1. GET和POST的请求的区别 Post 和 Get 是 HTTP 请求的两种方法,其区别如下: 应用场景: GET 请求是一个幂等的请求,一般 Get 请求用于对服务器资源不会产生影响的场景,比如说请求一个网页的资源。而 Po…

Mac 禁用一些高占用cup的进程

什么是CrashReporter? CrashReporter在应用程序崩溃的任何时候都会运行,它旨在保存应用程序状态,以帮助开发人员找出应用程序崩溃原因。基本上,一个进程是启动、崩溃(并调用CrashReporter),然后…

竞赛选题 深度学习火车票识别系统

文章目录 0 前言1 课题意义课题难点: 2 实现方法2.1 图像预处理2.2 字符分割2.3 字符识别部分实现代码 3 实现效果4 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 图像识别 火车票识别系统 该项目较为新颖,适…

百度上线“文心一言”付费版本,AI聊天机器人市场竞争加剧

原创 | 文 BFT机器人 百度不愧是我国AI技术领域的先行者,每年致力于人工智能领域取得技术产品的突破和创新。据爆料称,百度的文心一言有突破了新境界,开创了文心大模型4.0会员版本。从线上的to C产品到试水商业化,百度都是争先走…

kubernetes集群编排——k8s认证授权

pod绑定sa [rootk8s2 ~]# kubectl create sa admin [rootk8s2 secret]# vim pod5.yaml apiVersion: v1 kind: Pod metadata:name: mypod spec:serviceAccountName: admincontainers:- name: nginximage: nginxkubectl apply -f pod5.yamlkubectl get pod -o yaml 认证 [rootk8s…

iOS 让界面元素的文字随着语言的更改而变化——本地化文字跟随

在我的 App 内置的设置中,修改了语言,这时需要让当前界面的文本跟着改变语言。 解决方法是:添加一个观察者,观察 localize 本地语言的通知,然后一有变化就调用自定义的方法执行操作。(而设置中其实是改变了…

华为交换机忘记console密码怎么办?

console线RJ45头 连接交换机console口,usb接口连接电脑电脑桌面计算机右键-》管理,端口查看端口是com几 3打开secureCRT 点击第二个图标,快速连接,然后设置下参数,如下图 4、重启交换机 5、看到如下图提示信息&#x…

C语言 指针进阶

目录 数组指针 指针数组访问数组元素 再次讨论数组名 数组指针访问一维数组(但是这样会很别扭) 访问二维数组元素 非数组指针访问 数组指针访问 数组传参Demo 一维数组传参 二维数组传参 指针数组指针 字符指针 函数指针 函数指针调用时可以…

校园安防监控系统升级改造方案:如何实现设备利旧上云与AI视频识别感知?

一、背景与需求分析 随着现代安防监控科技的兴起和在各行各业的广泛应用,监控摄像头成为众所周知的产品,也为人类的工作生活提供了很大的便利。由于科技的发达,监控摄像头的升级换代也日益频繁。每年都有不计其数的摄像头被拆掉闲置&#xf…

Apache Maven;会话技术

Apache Maven是一个项目管理和构建工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建、报告和文档。 Maven模型有: 项目对象模型、依赖管理模型、插件 会话技术: 会话&#xff1a…

2023年云计算的发展趋势如何?

混合云的持续发展:混合云指的是将公有云和私有云进行结合,形成一种统一的云计算环境。随着企业对数据隐私和安全性的要求越来越高,以及在数据存储和处理方面的需求不断增长,混合云正在逐渐成为主流。预计未来混合云将会继续保持高…

C++学习笔记---命名空间namespace

文章目录 前言简介定义命名空间using指令不连续&嵌套的命名空间 前言 wu 简介 C中的命名空间(Namespace)是一种用于组织和封装代码的机制,它允许你将一组相关的函数、类、变量和其他标识符放置在一个逻辑分组内,以便在不同的…

【ARM Coresight 系列文章 3.5 - ARM Coresight -- JTAG-DP(JTAG Debug Port) 详细介绍】

请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】 文章目录 概述1.1 DP elements1.1.1 外部连接到 JTAG-DP上的信号1.1.2 Debug TAP 状态机1.2 指令扫描链和指令1.3 DPv3 JTAG-DP 访问AP示意图概述 本节内容主要介绍 JTAG Debug Port 、Debug Test Access Port (DBGTAP), D…

浅谈Elasticsearch查询和搜索

Elasticsearch查询和搜索 Elasticsearch是一个分布式、实时的搜索和分析引擎,广泛应用于全文搜索、日志分析、实时数据分析等场景。Elasticsearch提供了丰富的查询和搜索功能,如查询DSL、过滤、排序、分页、高亮和聚合等。本文将详细介绍如何在Elastics…

Github 生成SSH秘钥及相关问题

1.生成过程参考:Github 生成SSH秘钥(详细教程)_github生成密钥controller节点生成ssh秘钥-CSDN博客 2.遇到的问题:GitHub Connect: kex_exchange_identification: Connection closed by remote host 参考:解决 GitHu…

搜索引擎Elasticsearch基础与实践

倒排索引 将文档中的内容分词,然后形成词条。记录每条词条与数据的唯一表示如id的对应关系,形成的产物就是倒排索引,如下图: ElasticSearch数据的存储和搜索原理 这里的索引库相当于mysql中的database。一个文档(do…

微服务架构——笔记(3)Eureka

微服务架构——笔记(3) 基于分布式的微服务架构 本次笔记为 此次项目的记录,便于整理思路,仅供参考,笔者也将会让程序更加完善 内容包括:1.支付模块、2.消费者订单模块、支付微服务入驻Eureka、Eureka集群…