【发布时间】:2021-10-19 16:17:54
【问题描述】:
我正在尝试使用 python、selenium 和 chrome 从 Microsoft 的 Tasks/Planner 网站将规划器导出为 excel。 Selenium 会打开一个缺少 cookie 的新浏览器,因此总是提示输入凭据,并且 - 对于我的公司 - 双重身份验证。根据其他堆栈交换帖子,我保存并使用了解决此问题的 cookie。有没有一种不同的、理想的更好的方法来解决这个问题?我只是想知道。
这是我的代码,以防它帮助面临类似任务的人。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import os, time, datetime
import json
def save_cookie(driver, path): #https://stackoverflow.com/questions/45417335/python-use-cookie-to-login-with-selenium
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"
#r = requests.Session()
driver = webdriver.Chrome(r"C:\Users\user\AppData\Roaming\Python\Python38\site-packages\chromedriver.exe")
#Go to domain cookies rely on
driver.get("https://tasks.office.com/")
#load cookies
load_cookie(driver, r"C:\Users\user\Downloads\cookies.json")
driver.get(url) #go to actual website
authenticated = 'definitive_text_segment_from_url' in driver.current_url
if not authenticated: #Login to refresh cookie if stale.
username = input("Please provide a username")
password = input("Please provide a password")
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("Please provide the authentification code.")
elem = driver.find_element_by_xpath(menu_selector)
elem.click() #clicks on three dots
elem = driver.find_element_by_name(save_selector)
elem.click() #clicks on export planner option and autosaves file
save_cookie(driver, r"C:\Users\user\Downloads\cookies.json")
【问题讨论】:
-
你不能用api吗?
-
@RJAdriaansen 感谢您的回复!是的,当我查看它并跳到更简单的 selenium + cookie 选项时,我没有看到导出为 excel 的选项。但现在我已经进一步研究它似乎是可行的。
标签: python selenium-chromedriver ms-office