如何用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
相关产品推荐
相关产品推荐

