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

使用Selenium从Hotmail/Outlook提取邮件内容保存到TXT的问题求助

核心错误梳理

  • 逻辑顺序错:原代码遍历邮件列表时只执行点击操作,所有邮件点完才提取一次内容,最终只能拿到最后一封的内容
  • 定位方法不存在:Selenium没有find_element_by_dir内置方法,需要用xpath/css选择器匹配dir="Itr"的div元素
  • 无加载等待:点击邮件后内容区需要加载时间,直接提取会找不到元素或读取到旧内容
  • 列表元素易失效:点击邮件后页面DOM刷新,最初获取的邮件列表元素会失效,后续点击会抛出异常
  • 写入逻辑错误:循环内重复拼接字符串、重复打开文件追加,会导致内容重复写入

修正后可运行代码

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

emailcontent = []

def getEmails(self):
    self.browser.get("https://outlook.live.com/mail/0/inbox")
    time.sleep(3)
    # 先统计邮件总数,避免后续元素失效影响遍历
    email_count = len(self.browser.find_elements(By.CSS_SELECTOR, "._2ZDUqsleGa-jar5wAYvVzV"))
    
    for i in range(email_count):
        # 每次循环重新获取邮件列表,解决DOM刷新导致的元素失效问题
        emails = self.browser.find_elements(By.CSS_SELECTOR, "._2ZDUqsleGa-jar5wAYvVzV")
        emails[i].click()
        # 显式等待邮件内容加载完成
        WebDriverWait(self.browser, 10).until(
            EC.presence_of_element_located((By.XPATH, '//div[@dir="Itr"]'))
        )
        # 提取当前打开的邮件内容
        content = self.browser.find_element(By.XPATH, '//div[@dir="Itr"]').text
        emailcontent.append(content)
        # 小间隔避免请求过快触发反爬
        time.sleep(1)

getEmails()

# 统一写入文件,减少重复IO操作,加utf-8编码避免乱码
with open("new.txt", "w", encoding="utf-8") as output:
    for a in emailcontent:
        output.write(f"{a:<30}\n")

os.startfile('new.txt')

内容的提问来源于stack exchange,提问作者eyup.tatar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:57:05