使用Python导出Microsoft Tasks Planner数据的更优实现方案咨询
更优实现方案整理
- 方案1:复用本地Chrome用户配置文件
不用手动维护Cookie,启动Selenium时直接指定本地Chrome的用户数据目录,启动的浏览器会复用你平时已登录的账号状态,不需要重复输入账号密码和2FA验证码,适配公司的身份验证策略,稳定性比手动存Cookie高。核心启动配置示例:from selenium.webdriver.chrome.options import Options chrome_options = Options() # 替换为你本地Chrome的用户数据路径,Windows默认路径参考如下,按实际情况修改 chrome_options.add_argument(r"user-data-dir=C:\Users\你的用户名\AppData\Local\Google\Chrome\User Data") # 如果要指定用哪个配置文件,加这句,默认是Default chrome_options.add_argument("profile-directory=Default") driver = webdriver.Chrome(options=chrome_options) - 方案2:调用Microsoft Graph API实现导出
完全不用依赖浏览器模拟操作,不会因为微软调整Planner前端页面结构导致代码失效。可以直接调用官方提供的Planner相关接口拉取计划、任务、标签、成员等全量数据,再用pandas自行生成Excel文件,适合长期稳定运行、批量导出的场景,是最优的生产级方案。 - 方案3:现有Cookie复用方案优化
如果继续用当前的Cookie方案,可以做以下优化:- 用webdriver-manager自动管理chromedriver版本,不用写死本地路径,避免Chrome更新后驱动不兼容
- 替换隐式等待为显式等待,避免页面未加载完成导致元素查找报错
- 加密存储Cookie文件,不要明文放在下载目录,降低账号信息泄露风险
原实现参考代码
from selenium import webdriver from selenium.webdriver.common.keys import Keys import os, time, datetime import json def save_cookie(driver, path): with open(path, 'w') as filehandler: json.dump(driver.get_cookies(), filehandler) def load_cookie(driver, path): with open(path, 'r') as cookiesfile: cookies = json.load(cookiesfile) for cookie in cookies: cookie.pop("domain") driver.add_cookie(cookie) url = "https://tasks.office.com/path/to/planner" menu_selector = '//button[@title="More. Navigate to other pages related to this plan."]' save_selector = "Export plan to Excel" driver = webdriver.Chrome(r"C:\Users\user\AppData\Roaming\Python\Python38\site-packages\chromedriver.exe") # 先跳转到Cookie所属的域名 driver.get("https://tasks.office.com/") # 加载本地存储的Cookie load_cookie(driver, r"C:\Users\user\Downloads\cookies.json") # 跳转至目标Planner页面 driver.get(url) authenticated = 'definitive_text_segment_from_url' in driver.current_url if not authenticated: # Cookie过期时重新登录刷新 username = input("请输入用户名") password = input("请输入密码") driver.find_element_by_name("loginfmt").send_keys(username) driver.find_element_by_name("loginfmt").send_keys(Keys.RETURN) driver.find_element_by_name("pf.username").send_keys(username) driver.find_element_by_name("pf.pass").send_keys(password) driver.find_element_by_name("pf.pass").send_keys(Keys.RETURN) authentification_code = input("请输入双重验证验证码") elem = driver.find_element_by_xpath(menu_selector) elem.click() # 点击更多按钮 elem = driver.find_element_by_name(save_selector) elem.click() # 点击导出到Excel选项,文件自动保存 # 保存最新的Cookie save_cookie(driver, r"C:\Users\user\Downloads\cookies.json")
内容的提问来源于stack exchange,提问作者Spencer
相关产品推荐
相关产品推荐

