我使用批处理文件来运行打开和关闭 Outlook。打开后,如何使用 python 'import win32com.client' 库打开电子邮件,并单击下载按钮?有什么建议吗?
我能够从电子邮件下载附件,但是他们停止将文件作为附件发送,但现在改为下载链接..
import datetime
import os
import win32com.client
from pathlib import Path
home = str(Path.home())path = 'where to download'
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI") #opens outlookinbox = outlook.GetDefaultFolder(6)messages = inbox.Items
def saveattachemnts(subject):for message in messages:if message.Subject == subject and message.Unread:#if message.Unread: #I usually use this because the subject line contains time and it varies over time. So I just use unread
# body_content = message.body
attachments = message.Attachments
attachment = attachments.Item(1)
for attachment in message.Attachments:
attachment.SaveAsFile(os.path.join(path, str(attachment)))
if message.Subject == subject and message.Unread:
message.Unread = False
break
saveattachemnts('Scheduled Report BI Report - All NPIs - Active and Net New NPIs (Do Not Edit): You have received a new report')
无法直接使用
win32com.client
点击电子邮件中的下载按钮。这是因为
win32com.client
主要与 Outlook 对象模型交互,该模型允许访问和操作电子邮件、文件夹和附件等元素,但不能控制电子邮件正文中显示的网页内容。
为了实现的目标,需要使用可以与网页交互的工具或库。以下是两种常用的方法:
1. 使用 Web 自动化工具
- Selenium: 这是一个流行的 Web 自动化框架,可用于控制 Web 浏览器(如 Chrome 或 Firefox)。可以使用 Selenium 打开包含下载链接的电子邮件,找到下载按钮,然后模拟点击操作以下载文件。
以下是一个使用 Selenium 和 Chrome 浏览器实现此目的的 Python 代码示例:
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
# 设置 Chrome 驱动程序路径
driver_path = 'path/to/chromedriver'
# 创建 Chrome 驱动程序实例
driver = webdriver.Chrome(driver_path)
# 打开包含下载链接的电子邮件
driver.get("email_url")
# 等待下载按钮出现并点击
download_button = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, "//button[contains(text(), 'Download')]"))
)
download_button.click()
# 关闭浏览器
driver.quit()
2. 使用 HTTP 请求库
-
Requests:
可以使用
requests
库直接向下载链接发送 HTTP 请求。这种方法需要检查网页源代码以找到下载链接的 URL。
以下是一个使用
requests
库下载文件的示例:
import requests
# 下载链接 URL
download_url = "https://example.com/download_file"
# 发送 HTTP 请求以下载文件
response = requests.get(download_url)
# 保存文件
with open("downloaded_file.xlsx", "wb") as file:
file.write(response.content)
请注意,这两种方法都需要对 Web 开发和 HTML 结构有一定的了解。需要检查电子邮件正文的 HTML 源代码,以找到下载按钮或下载链接的标识符(例如 ID、类名或 XPath)。
此外,还需要将这些代码片段与现有的 Outlook 自动化脚本集成,以便在打开电子邮件后执行它们。
标签:python,win32com From: 78814387