You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python Selenium实现Gmail邮件发送及发送状态验证

基于Python Selenium实现Gmail自动化:写邮件、发邮件+发送验证

前置依赖

先装好必要的库:

pip install selenium

还要准备对应浏览器的驱动(比如ChromeDriver),可以配置环境变量或者在代码里直接指定驱动路径。


完整代码实现

涵盖登录Gmail、撰写发送邮件、验证已发送箱的全流程:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

# 初始化Chrome驱动(换其他浏览器改对应驱动即可)
driver = webdriver.Chrome()
driver.maximize_window()

# 打开Gmail登录页
driver.get("https://mail.google.com/")

# 自行处理登录逻辑,比如输入账号密码;建议用已登录的浏览器配置文件跳过重复登录
# 示例登录步骤(实际需根据页面元素调整):
# WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.ID, "identifierId"))).send_keys("你的邮箱")
# driver.find_element(By.ID, "identifierNext").click()
# WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.NAME, "Passwd"))).send_keys("你的密码")
# driver.find_element(By.ID, "passwordNext").click()

# 点击「撰写」按钮
WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, "//div[text()='撰写']"))).click()

# 填写收件人、主题、邮件内容
WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.NAME, "to"))).send_keys("prasannakpechu@gmail.com")
driver.find_element(By.NAME, "subjectbox").send_keys("demo")
driver.find_element(By.XPATH, "//div[@role='textbox']").send_keys("这是测试邮件内容")

# 点击发送按钮
driver.find_element(By.XPATH, "//div[text()='发送']").click()

# 验证邮件是否在已发送箱
def verify_sent_email():
    # 进入已发送邮件箱
    WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.LINK_TEXT, "已发送"))).click()
    
    # 等待已发送邮件列表加载完成
    WebDriverWait(driver, 20).until(EC.presence_of_all_elements_located((By.XPATH, "//tr[@role='row']")))
    
    # 刷新页面确保获取最新邮件(可选,根据实际情况调整)
    driver.refresh()
    WebDriverWait(driver, 20).until(EC.presence_of_all_elements_located((By.XPATH, "//tr[@role='row']")))
    
    # 获取所有邮件行元素
    emails = driver.find_elements(By.XPATH, "//tr[@role='row']")
    
    # 遍历查找目标邮件
    email_found = False
    for email in emails:
        # 不要直接匹配完整文本(避免换行/空格干扰),拆分匹配关键词更可靠
        email_text = email.text
        if "prasannakpechu@gmail.com" in email_text and "Subject: demo" in email_text:
            print("邮件发送成功,已在已发送箱找到")
            email_found = True
            break
    
    if not email_found:
        print("已发送箱未找到目标邮件,发送可能失败")

# 执行验证
verify_sent_email()

# 关闭驱动
time.sleep(3)
driver.quit()

原验证代码的优化点

你提供的验证逻辑可以做几个关键改进:

  • 替换固定休眠:用WebDriverWait显式等待代替time.sleep,既保证稳定性,又不会浪费不必要的等待时间
  • 灵活匹配文本:原代码直接匹配完整字符串,但Gmail邮件行的文本可能包含换行或额外空格,拆分匹配关键词更稳妥
  • 结构封装:把验证逻辑封装成函数,代码更清晰易维护

注意事项

  • Gmail页面元素可能随版本更新变化,要定期检查XPATH、LINK_TEXT等定位器是否有效
  • 频繁自动化操作可能触发Google反机制,建议用已登录的浏览器配置文件(启动驱动时指定user-data-dir),减少重复登录次数
  • 若遇到验证码,手动处理后再继续流程,不要用第三方验证码服务(违反Google条款)

内容的提问来源于stack exchange,提问作者prasannakpechu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 02:30:46