[Python自动化办公]--从网页登录网易邮箱进行邮件搜索并下载邮件附件

news2024/9/29 9:33:29

[Python自动化办公]–从网页登录网易邮箱进行邮件搜索并下载邮件附件

使用说明

​ 本文使用Python的selenium库进行操作邮箱登录、固定名称搜索邮件并下载附件,Python版本:3.9.16, selenium版本:4.19.0,EdgeBrowser版本:126.0.2592.87。

准备工作

安装Python及selenium不多赘述,可自行搜索安装,除了具备基本的Python编程知识外还需要了解网页知识。
安装Edge浏览器驱动:
查看当前使用的Edge浏览器版本:设置 -->关于 即可查看

在这里插入图片描述

驱动下载地址

下载并解压缩。记住文件路径,后面会用到。(浏览器会定期更新的话需要及时更新驱动)

编写代码

首先给出一段完整的代码,再来分步骤讲解。

完整demo
from selenium import webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.edge.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
from datetime import datetime, timedelta
import time


def input_info():
    '''
    用于生成文件名称字符
    如果你需要自动下载的邮件名称是每天根据日期变化的可以参考此函数进行适当修改
    '''
    # 获取当天日期
    today = datetime.now().date()
    # 获取当天日期减去2天的日期
    target_date = today - timedelta(days=2)
    # 格式化日期为“4月6日”的形式
    formatted_date = target_date.strftime("%m月%d日").lstrip("0").replace("月0", "月")
    # 拼接字符串
    res = formatted_date + "你要的邮件"
    return res



driver_path = r"C:\Users\JA043204\Desktop\getMail\edgedriver_win64\msedgedriver.exe"
edge_options = Options()
edge_options.use_chromium = True  # 如果正在使用新的基于 Chromium 的 Edge,设置为 True
service = Service(executable_path=driver_path)

driver = webdriver.Edge(service=service, options=edge_options)

# 打开登录页面
driver.get("https://mailh.qiye.163.com/")

# 填写用户名和密码
usrname = "yourusrname" # 需替换为自己的用户名
pwd = "yourpwd" # 需替换为自己的密码

try:
    # 在 Selenium 4 中,推荐使用 find_element 方法代替 find_element_by_* 方法
    driver.find_element("id", "account_name").send_keys(usrname)
    driver.find_element("id", "password").send_keys(pwd)

    # 点击登录按钮
    driver.find_element("id", "submit-btn").click()

    # 等待一段时间,确保登录成功后的页面加载完成
    time.sleep(5)

    # 执行登录后的操作,比如获取用户信息等
    # 比如,获取登录后的页面标题
    print(driver.title)

    # 找到搜索的input框,并输入"质量部基础数据"
    input_box = driver.find_element(By.XPATH,'//input[@placeholder="搜索邮件"]')
    input_box.send_keys(input_info())

    # 发送回车键操作,触发搜索或相应的动作
    input_box.send_keys(Keys.RETURN)
    time.sleep(2)
    # 使用显式等待尝试定位元素
    target_div = WebDriverWait(driver, 3).until(
        EC.presence_of_element_located(
            (By.XPATH, ('//span[@class="summary-content summary-content-maxwidth"]'))))
    target_div.click() # 点击打开邮件
    time.sleep(2)
    # 找到邮件后定位到打包下载邮件附件相关元素
    tar_a = WebDriverWait(driver, 5).until(
        EC.presence_of_element_located(
            (By.XPATH, '//span[@class="save-all"]'))
    )
	
    driver.execute_script("arguments[0].click();", tar_a)


finally:
    # 关闭浏览器
    if input("是否关闭浏览器? (y/n): ").lower().startswith('y'):
        driver.quit()
导入必要包
  1. from selenium import webdriver:
    • 导入 Selenium 的 WebDriver 类,用于启动浏览器和执行操作。
  2. from selenium.webdriver.edge.service import Service:
    • 导入 Edge 浏览器的 Service 类,用于配置和启动 Edge 浏览器的 WebDriver 服务。
  3. from selenium.webdriver.edge.options import Options:
    • 导入 Edge 浏览器的 Options 类,用于设置 Edge 浏览器的选项,如设置浏览器启动参数。
  4. from selenium.webdriver.support.ui import WebDriverWait:
    • 导入 WebDriverWait 类,用于显式等待页面元素加载并设定等待条件。
  5. from selenium.webdriver.common.by import By:
    • 导入 By 类,用于指定查找元素的方法,例如通过 ID、Class Name、XPath 等。
  6. from selenium.webdriver.support import expected_conditions as EC:
    • 导入 expected_conditions 模块,这是 WebDriverWait 的一部分,包含了预期条件,如元素可见、元素存在、元素包含文本等。
配置浏览器驱动
driver_path = r"C:\Users\JA043204\Desktop\getMail\edgedriver_win64\msedgedriver.exe" # 替换为准备工作中的路径
edge_options = Options()
edge_options.use_chromium = True  # 如果正在使用新的基于 Chromium 的 Edge,设置为 True
service = Service(executable_path=driver_path)

driver = webdriver.Edge(service=service, options=edge_options)
打开网页

使用 driver.get()方法,传入参数为登录界面url。

从浏览器中定位元素
  1. 从浏览器打开登录界面,然后 按下F12 打开开发工具。
    在这里插入图片描述

  2. 使用检查元素来定位网页内容
    在这里插入图片描述

    先点击检查元素工具图标,然后点击用户名输入框
    在这里插入图片描述

这样就能快速找到该元素网页源码的位置

使用selenium定位元素
  1. 通过元素 ID 定位:
    使用 find_element_by_id 方法可以通过元素的 ID 属性来定位元素。例如:

    element = driver.find_element_by_id("element_id")
    
  2. 通过元素名称定位:
    使用 find_element_by_name 方法可以通过元素的名称属性来定位元素。例如:

    element = driver.find_element_by_name("element_name")
    
  3. 通过类名定位:
    使用 find_element_by_class_name 方法可以通过元素的类名来定位元素。注意,如果有多个元素具有相同的类名,它会返回第一个匹配的元素。例如:

    element = driver.find_element_by_class_name("element_class")
    
  4. 通过标签名定位:
    使用 find_element_by_tag_name 方法可以通过元素的标签名来定位元素。例如:

    element = driver.find_element_by_tag_name("tag_name")
    
  5. 通过链接文本定位:
    使用 find_element_by_link_text 方法可以通过链接的文本内容来定位元素。例如:

    element = driver.find_element_by_link_text("Link Text")
    
  6. 通过部分链接文本定位:
    使用 find_element_by_partial_link_text 方法可以通过链接的部分文本内容来定位元素。例如:

    element = driver.find_element_by_partial_link_text("Partial Link Text")
    
  7. 通过 XPath 表达式定位:
    使用 find_element_by_xpath 方法可以通过 XPath 表达式来定位元素。XPath 是一种强大的定位方式,可以根据元素的层次结构、属性等来精确定位元素。例如:

    element = driver.find_element_by_xpath("//div[@id='example']/p[1]")
    
  8. 通过 CSS 选择器定位:
    使用 find_element_by_css_selector 方法可以通过 CSS 选择器来定位元素。CSS 选择器也是一种强大的定位方式,可以根据元素的样式、层次结构等来定位元素。例如:

    element = driver.find_element_by_css_selector("div#example > p:first-child")
    

在完整demo代码中只用到了元素ID定位和XPath定位,以上是不同的定位方式,可根据个人喜好选择使用,下面再介绍一下啊XPath表达式定位:XPath 是一种用于在 XML 文档中定位和选择元素的查询语言。它同样适用于 HTML 文档,因为 HTML 也可以被视为一种 XML 变体。以下是 XPath 的基本写法和一些常用的表达式:

  1. 选择元素
    • 绝对路径:从根节点开始的路径,以斜杠 / 开头。例如:/html/body/div
    • 相对路径:相对于当前节点的路径,以双斜杠 // 开头。例如://div/p
  2. 谓语(Predicate):用于过滤元素的附加条件,放在方括号内。
    • 例如://div[@class='content'] 选择 class 属性为 ‘content’ 的 div 元素。
  3. 选取节点
    • nodename:选择所有指定节点名的元素。例如://div 选择所有 div 元素。
    • *:选择当前节点的所有子元素。
    • @attribute:选择当前节点的指定属性。例如://@href 选择所有 href 属性。
    • text():选择当前节点的文本内容。
  4. 逻辑运算符
    • and, or, not:用于组合多个条件。
  5. (Axis):用于指定相对于当前节点的节点集合。
    • ancestor, parent, child, following-sibling, preceding-sibling 等。
  6. 通配符
    • *:匹配任何元素节点。
    • @*:匹配任何属性节点。
  7. 函数
    • name():获取当前节点的名称。
    • contains():检查一个字符串是否包含另一个字符串。
    • text():获取当前节点的文本内容。

例如,以下是一些示例 XPath 表达式:

  • //div[@id='content']:选择 id 属性为 ‘content’ 的所有 div 元素。
  • //a[@href='https://example.com']:选择所有 href 属性为 ‘https://example.com’ 的 a 元素。
  • //div[@class='main']//p:选择 class 属性为 ‘main’ 的 div 元素下的所有 p 元素

比如现在我需要定位用户名输入框,那么根据网页源码可以写Xpath表达式为: //input[@id='account_name']

然后再网页元素界面按下 Ctrl+F会跳出查找框,输入你写好的的XPath表达式后按下回车
在这里插入图片描述

可以看到查询结果之后在搜索框右侧有 1 of 1 字样表示当前是符合表达的结果中的唯一一个,定位的位置和刚才查找的网页源码一致,说明是我们想要的结果。

对网页元素进行操作

下面是操作详解:

  1. 定位元素:为了在网页上进行任何操作,Selenium需要首先找到需要操作的元素。定位元素通常通过选择器来完成,如ID、class、tag name、name、link text、partial link text、css selector或XPath。例如,driver.find_element_by_id("username")会找到ID为username的元素。
  2. 操作输入框:可以通过send_keys方法向输入框(通常是<input>标签)发送输入,如用户名或密码。例如,username_field.send_keys("myusername")
  3. 点击按钮:使用click()方法可以点击按钮或链接。例如,submit_button.click()会点击ID为submit_button的按钮。
  4. 提交表单:通过点击<form>标签上的提交按钮,或者直接调用submit()方法可以在表单提交时触发动作。例如,form.submit()会提交表单。
  5. 获取和设置元素属性:可以通过get_attribute()方法获取元素的属性值,还可以利用set_attribute()方法设置属性值。例如,element.get_attribute("class")会获取元素的class属性值。
  6. 执行JavaScript:Selenium提供了一个execute_script()方法,可以用来执行任何JavaScript代码。这意味着可以通过JavaScript与DOM交互来完成操作。
  7. 处理下拉框:可以使用select_by_visible_text()select_by_index()select_by_value()等方法来选择下拉框中的选项。这些方法位于Select类中。例如,dropdown.select_by_visible_text("option2")会选择下拉框中的可见文本为option2的选项。
  8. 处理弹出框:Selenium提供了的方法来处理JavaScript警告、确认框和提示框。例如,alert.accept()会确认一个警告框。
  9. 切换窗口:当网页上打开新窗口时,Selenium提供的方法switch_to.window可以用来切换到另一个窗口或标签页。例如,`driver.switch_to.window

对于登录界面我们要做的是,输入用户名和密码然后按下登录按钮也就是用到了 send_keys()click()方法

但是网页中的某些元素被JavaScript或css限制不可见或者不可点击,那么无法使用使用 click(),这时候需要通过execute_script()来完成点击操作。

比如完整demo中的 driver.execute_script("arguments[0].click();", tar_a)

然后解释一下下面这段代码

tar_a = WebDriverWait(driver, 5).until(
        EC.presence_of_element_located(
            (By.XPATH, '//span[@class="save-all"]'))
    )
  1. WebDriverWait(driver, 5):
    • WebDriverWait 是 Selenium 提供的等待方式,它会在指定的时间内等待某个条件成立后继续执行下面的代码。
    • driver 是你创建的 WebDriver 实例,用于控制浏览器的操作。
    • 5 是最长等待时间,即最多等待5秒。
  2. .until() 方法:
    • until() 方法是 WebDriverWait 的一个函数,它接受一个条件(Expected Condition,EC)作为参数,并且会不断地调用这个条件,直到返回 True 或者超过最长等待时间为止。
  3. EC.presence_of_element_located((By.XPATH, '//span[@class="save-all"]')):
    • EC.presence_of_element_located 是预定义的一个条件,表示等待直到页面上至少出现一个满足条件的元素。
    • (By.XPATH, '//span[@class="save-all"]') 是定位元素的方式,指定了使用 XPath 来找到页面上 class 属性为 "save-all"span 元素。
  4. tar_a = ...:
    • 最后将等待到的元素赋值给变量 tar_a,这样就可以进一步操作这个元素了。

综上所述,这段代码的作用是等待页面中的一个 span 元素,该元素的 class 属性为 "save-all",等待时间最多为5秒。一旦找到该元素,就将它赋值给变量 tar_a,以便后续对该元素进行操作,比如点击或者获取其文本内容等。

an[@class=“save-all”]')是定位元素的方式,指定了使用 XPath 来找到页面上class属性为"save-all"span元素。 4. tar_a = …: - 最后将等待到的元素赋值给变量 tar_a`,这样就可以进一步操作这个元素了。

综上所述,这段代码的作用是等待页面中的一个 span 元素,该元素的 class 属性为 "save-all",等待时间最多为5秒。一旦找到该元素,就将它赋值给变量 tar_a,以便后续对该元素进行操作,比如点击或者获取其文本内容等。

最后,对于网页验证这一步骤在这个示例中不涉及,可以从代码中启动网页,填写信息登录后获取手机验证码并填写,之后一段时间网站cookie会保留登录信息。

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

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

相关文章

【ARM】MDK安装ARM_compiler5无法打开安装程序

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 在客户安装了最新版本的MDK5.37及后续更新版本&#xff0c;但原工程使用ARM_Compiler_5.06进行编译和调试&#xff0c;需安装ARM_Compiler_5.06的编译器版本&#xff0c;但在解压缩的过程中后续无法打开ARM_Compiler…

图像分割-编码解码网络的训练-kreas实现

一、数据集加载&#xff1a; 纯手工打造一个函数用来加载数据&#xff0c;数据分别为image和mask 我们所需要的类型&#xff1a;&#xff08;B数量&#xff0c;长&#xff0c;宽&#xff0c;通道数&#xff09;&#xff0c;只要将数据加载成这样并mask和image对应就行。 第一步…

【抢先体验】Win11 22H2/23H2七月更新补丁KB5040442!

系统之家于7月10日发出最新报道&#xff0c;微软为Win11 22H2/23H2用户发布了七月的更新补丁KB5040442&#xff0c;用户更新系统后&#xff0c;可以发现版本号升至22621.3880和22631.3880。此次更新针对远程身份验证拨入用户服务协议与MD5冲突等多个问题进行修复。接下来跟随小…

视频怎么压缩变小?最佳视频压缩器

即使在云存储和廉价硬盘空间时代&#xff0c;大视频文件使用起来仍然不方便。无论是存储、发送到电子邮件帐户还是刻录到 DVD&#xff0c;拥有最好的免费压缩软件可以确保您快速缩小文件大小&#xff0c;而不必担心视频质量下降。继续阅读以探索一些顶级最佳 免费视频压缩器选项…

springboot通江银耳销售管理系统-计算机毕业设计源码15998

摘要 随着人们健康意识的增强&#xff0c;银耳这种传统的中药食材备受关注。而通江银耳是四川省通江县特产&#xff0c;中国国家地理标志产品。四川省通江县是银耳的发源地&#xff0c;中国银耳之乡&#xff0c;通江银耳因主产于此而得名&#xff0c;以其独到的质厚、肉嫩、易炖…

哪些行业更需要TPM管理咨询公司?

当下&#xff0c;TPM&#xff08;全面生产维护&#xff09;作为一种旨在提高设备效率、降低维护成本的管理理念&#xff0c;已经被越来越多的行业所认可和采纳。然而&#xff0c;不同行业因其特性和需求的不同&#xff0c;对TPM管理咨询公司的需求也各有侧重。下面将探讨哪些行…

selenium采集招标网站公告

selenium采集招标网站公告 一、项目介绍二、采集过程三、完整代码一、项目介绍 本次数据采集以某市建设工程交易服务中心数据为例,网址为“http://www.shcpe.cn/jyfw/xxfw/u1ai51.html”,网站首页如下图所示: 采集到的字段如下图所示: 二、采集过程 本次数据采集使用的…

sdwan是硬件还是网络协议?

SD-WAN&#xff08;Software-Defined Wide Area Network&#xff0c;软件定义广域网&#xff09;并不是一个硬件产品或单一的网络协议&#xff0c;而是结合了软件、硬件和网络技术的一种解决方案。SD-WAN的核心在于其软件定义的特性&#xff0c;它通过软件来控制和管理广域网的…

Ubuntu20.04下修改samba用户密码

Ubuntu20.04下修改samba用户密码 在Ubuntu系统中&#xff0c;修改samba密码通常涉及到两个方面&#xff1a;更改samba用户的密码和重置samba服务的密码数据库。以下是如何进行操作的步骤&#xff1a; 1、更改samba用户密码&#xff1a; 打开终端&#xff0c;使用以下命令更改…

智能汽车网络安全笔记

汽车五大域 动力底盘、车身控制、智能座舱、智能网联和高级辅助驾驶五大域 国外汽车安全法规标准 汽车网络安全管理体系&#xff08;CSMS&#xff09; CSMS指的是管理汽车的网络威胁和风险&#xff0c;并保护车辆免受网络攻击的组织过程和管理系统 安全验证和安全测试 8…

NVIDIA RTX 4090解析:卓越的性能表现带来全新的AI探索高度

前言 NVIDIA GeForce RTX 4090 在性能、效率和 AI 驱动的图形领域实现了质的飞跃。这款 GPU 采用 NVIDIA Ada Lovelace 架构&#xff0c;配备 24 GB 的 GDDR6X 显存。此外&#xff0c;RTX 4090还引入了多项创新技术。例如&#xff0c;它支持 DirectX12Ultimate&#xff0c;能够…

SpringMVC(2)——controller方法参数与html表单对应(请求参数的绑定)

controller方法参数与html表单对应 规则 1. 绑定机制 表单提交的数据都是kv格式的 usernamehaha&password123SpringMVC的参数绑定过程是把表单提交的请求参数&#xff0c;作为控制器中方法的参数进行绑定的&#xff0c;要求&#xff1a;提交表单的name和参数的名称是相同…

Python 给存入 Redis 的键值对设置过期时间

Redis 是一种内存中的数据存储系统&#xff0c;与许多传统数据库相比&#xff0c;它具有一些优势&#xff0c;其中之一就是可以设置数据的过期时间。通过 Redis 的过期时间设置&#xff0c;可以为存储在 Redis 中的数据设置一个特定的生存时间。一旦数据到达过期时间&#xff0…

足底筋膜炎用什么药效果好

足底筋膜炎最常见的症状是足跟的疼痛和不适。这种疼痛通常持续数月至数年&#xff0c;尤其在早晨醒来或长时间不活动后&#xff0c;如久坐、久卧后站起时&#xff0c;疼痛感觉尤为明显。早晨下床时的第一步&#xff0c;疼痛往往最为明显。因此&#xff0c;早晨下床踩地时&#…

Oracle执行一条SQL的内部过程

一、SQL语句根据其功能主要可以分为以下几大类&#xff1a; 1. 数据查询语言&#xff08;DQL, Data Query Language&#xff09; 功能&#xff1a;用于从数据库中检索数据&#xff0c;常用于查询表中的记录。基本结构&#xff1a;主要由SELECT子句、FROM子句、WHERE子句等组成…

悠律凝声环Ringbuds Pro耳机:素皮纹理质感独一档,音质也拉满

悠律&#xff08;UMELODY&#xff09;推出的这款新品——凝声环开放式耳机&#xff0c;以其独特的设计风格和出色的音质表现赢得了众多消费者的喜爱。 在外观上&#xff0c;凝声环采用了时尚潮酷的设计理念&#xff0c;并且采用简约典雅素皮工艺&#xff0c;首次将“素皮”材料…

计算机SCI期刊,中科院2区,影响力大,认可度高

一、期刊名称 Complex & Intelligent Systems 二、期刊简介 期刊类型&#xff1a;SCI 学科领域&#xff1a;计算机科学 影响因子&#xff1a;5.0 中科院分区&#xff1a;2区 三、期刊征稿范围 Complex & Intelligent Systems旨在提供一个论坛&#xff0c;用于展示…

vue实现预览编辑ppt、word、pdf、excel、等功能的解决方案(内网-前端)

在Vue中实现预览和编辑PPT、Word、PDF、Excel等文件的功能&#xff0c;尤其是在内网环境下且主要侧重于前端&#xff0c;我们需要明确的是&#xff0c;直接在前端编辑这些格式的文件&#xff08;特别是PPT和Word&#xff09;是非常复杂且通常不推荐的&#xff0c;因为这些格式涉…

精益思维驱动未来:人工智能产品设计的新篇章

在科技日新月异的今天&#xff0c;人工智能&#xff08;AI&#xff09;已经渗透到我们生活的方方面面&#xff0c;从智能家居到自动驾驶&#xff0c;从医疗诊断到金融服务&#xff0c;AI的应用场景越来越广泛。然而&#xff0c;如何确保AI产品在设计之初就具备高效、灵活和可持…

D634-341C电液伺服系统比例控制阀 R40KO2M0NSS2

D634-341C/R40KO2M0NSS2宁波秉圣现货供应 宁波秉圣工业技术有限公司是一家专门从事于欧洲,美国等多国家的进口备件进出口销售、技术咨询、技术服务、自动化设备服务为一体的贸易公司。公司的优势品牌如下&#xff1a;德国REXROTH&#xff08;力士乐&#xff09;、德国MOOG、美…