news 2026/7/6 21:34:42

Python自动化登录office_online并获取cookie

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python自动化登录office_online并获取cookie

Python自动化登录office_online并获取cookie

  • 一、安装selenium库和火狐浏览器及驱动
    • 1、Windows系统安装火狐浏览器和驱动
    • 2、Linux系统安装火狐浏览器和驱动
      • 安装 firefox 浏览器
      • 安装火狐浏览器驱动
  • 二、编写自动化登录的python脚本
    • 1、在windows系统
    • 2、在Linux系统

一、安装selenium库和火狐浏览器及驱动

使用selenium需要先下载对应版本的浏览器驱动,并配置路径,安装selenium库很简单,在命令窗口使用下面的命令:

pipinstallselenium

而驱动的部署方式在Windows和Linux有点不一样。

1、Windows系统安装火狐浏览器和驱动

首先通过下面的下载地址安装火狐浏览器:

http://www.firefox.com.cn/download/

接着通过下面的下载地址,下载对应系统版本的浏览器驱动,火狐浏览器对应驱动是 geckodriver :

https://github.com/mozilla/geckodriver/releases

最后将解压后的 getckodriver.exe 添加到 Path 环境变量中

如果不想添加到环境变量中,还可以在创建 firefox 驱动实例的时候指定 geckodirver 的位置:

webdriver.Firefox(executable_path="E:/Downloads/geckodriver/geckodriver.exe")

2、Linux系统安装火狐浏览器和驱动

安装 firefox 浏览器

首先通过下面的火狐浏览器下载地址中找到linux版本的链接,并复制:

http://www.firefox.com.cn/download/

接着使用wget命令下载linux版本的火狐浏览器,例如:

wgethttps://download-ssl.firefox.com.cn/releases/firefox/106.0/zh-CN/Firefox-latest-x86_64.tar.bz2

然后使用下面的命令解压得到 Firefox-latest-x86_64.tar:

bunzip2-dFirefox-latest-x86_64.tar.bz2

最后通过tar命令解压,例如:

tar-xvfFirefox-latest-x86_64.tar

安装火狐浏览器驱动

首先通过下面的下载地址中找到linux版本驱动的链接,并复制,火狐浏览器对应驱动是 geckodriver,浏览器和驱动对应关系-查看地址 :

https://github.com/mozilla/geckodriver/releases

接着使用wget命令下载linux版本的火狐浏览器驱动,例如:

wgethttps://github.com/mozilla/geckodriver/releases/download/v0.29.1/geckodriver-v0.29.1-linux64.tar.gz

最后通过tar命令解压,并将解压后的geckodriver 存放至 /usr/local/bin/ 路径下即可

tar-zxvfgeckodriver-v0.29.1-linux64.tar.gzcpgeckodriver /usr/local/bin/

二、编写自动化登录的python脚本

1、在windows系统

可以先在Windows系统调试,先导入所需的python库,配置引用驱动的路径,打开网页。
我这边用的是公司的,需根据自己的情况,换成自己公司或者个人的

fromseleniumimportwebdriver#用于引用驱动的路径fromselenium.webdriver.chrome.serviceimportService#指定火狐驱动的路径s=Service("D:/Program_Files/Anaconda3/geckodriver.exe")# 调用火狐浏览器打开1个标签页driver=webdriver.Firefox(service=s)# 等待3秒,确保标签页已打开driver.implicitly_wait(3)#打开指定网页,我这边用的是公司的driver.get('https://xxxxx0-my.sharepoint.com/personal/chenhm21_xxxxx_com/_layouts/15/onedrive.aspx')# 等待3秒,确保网页已完成渲染time.sleep(3)

按F12进入开发者模式,然后点去左上角的“选取页面中的元素”或者按组合键:Ctrl+Shift+C;然后将鼠标移动至,需要锁定的元素位置,查看元素的ID或者其它属性值。(建议优先选择ID)

可以看出输入账号的文本框对应ID为"i0116"

通过同样的方式也可以得知下一步按钮对应的ID为:“idSIButton9”,于是输入账号对应的Python代码就可以知道。

#输入账号driver.find_element(by='id',value="i0116").send_keys("chenhm21@xxxxx.com")#点击下一步按钮driver.find_element(by='id',value="idSIButton9").click()#等待3秒,确保网页已跳转下一页面,并完成渲染time.sleep(3)

同理,接着完成输入密码、点击验证、输入手机验证码以及保持登录状态等步骤

#输入密码driver.find_element(by='id',value="i0118").send_keys("这里填写对应账号的密码")driver.find_element(by='id',value="idSIButton9").click()time.sleep(3)#确定通过手机短信验证driver.find_element(by='id',value="idDiv_SAOTCS_Proofs").click()#配置验证码,填入手机短信收到的验证码yanzhengma=input('请输入验证码:')#输入验证码driver.find_element(by='id',value="idTxtBx_SAOTCC_OTC").send_keys(yanzhengma)#点击验证driver.find_element(by='id',value="idSubmit_SAOTCC_Continue").click()#选择是否保持登录状态##打勾,选择保持driver.find_element(by='id',value="KmsiCheckboxField").click()##点击下一步driver.find_element(by='id',value="idSIButton9").click()

至此就成功进入到我们要打开的网页,即office_online的Excel个人主界面,这个时候我们就可以获取网页的cookie并保存

importos#获取cookiecookie=driver.get_cookies()cookieValue=''foritemincookie:cookieValue+=item['name']+'='+item['value']+';'#保存cookieprint(cookieValue)#将cookie保存到指定路径的文件中os.system("""echo '%s' >D:/铭专用/cookies.txt"""%(cookieValue))

若是需要定时获取,我们可以再借助循环和时间等待来实现,完整的代码如下:

fromseleniumimportwebdriverimporttimeimportdatetime#用于引用驱动的路径fromselenium.webdriver.chrome.serviceimportService#用于构建网页的扫描机制importselenium.webdriver.support.uiasuiimportos#通过By定位来调用网页的元素fromselenium.webdriver.common.byimportBy#指定火狐驱动的路径s=Service("D:/Program_Files/Anaconda3/geckodriver.exe")# 调用火狐浏览器打开1个标签页driver=webdriver.Firefox(service=s)# 等待3秒,确保标签页已打开driver.implicitly_wait(3)#打开指定网页driver.get('https://xxxxx0-my.sharepoint.com/personal/chenhm21_xxxxx_com/_layouts/15/onedrive.aspx')# 等待3秒,确保网页已完成渲染time.sleep(3)#配置扫描机制,N秒内每隔500毫秒扫描1次页面变化wait=ui.WebDriverWait(driver,30)#输入账号##调用扫描机制,来锁定网页中的元素,直至找到或者扫描时间耗尽driver.find_element(by='id',value="i0116").send_keys("这里填写对应账号")driver.find_element(by='id',value="idSIButton9").click()time.sleep(3)#输入密码driver.find_element(by='id',value="i0118").send_keys("这里填写对应账号的密码")driver.find_element(by='id',value="idSIButton9").click()time.sleep(3)try:#确定通过手机短信验证driver.find_element(by='id',value="idDiv_SAOTCS_Proofs").click()#配置验证码yanzhengma=input('请输入验证码:')#输入验证码driver.find_element(by='id',value="idTxtBx_SAOTCC_OTC").send_keys(yanzhengma)#点击验证driver.find_element(by='id',value="idSubmit_SAOTCC_Continue").click()exceptExceptionase:print("失败原因",e)print("没有进入验证")pass#选择是否保持登录状态try:##打勾,选择保持driver.find_element(by='id',value="KmsiCheckboxField").click()##点击下一步driver.find_element(by='id',value="idSIButton9").click()exceptExceptionase:print("失败原因",e)print("没有进入登录选项界面")#定时更新和获取,确保cookie可用defupdate_sleep_time():#更新时间列表,小时分钟hous_list=[100,1100,2100]count=0hm=datetime.datetime.now().hour*100+datetime.datetime.now().minuteforhinhous_list:count+=1ifh>hm:n=datetime.datetime.now().hour*3600+datetime.datetime.now().minute*60+datetime.datetime.now().second s=max(h*36-n,5)returnsbreakelifcount==len(hous_list):n=datetime.datetime.now().hour*3600+datetime.datetime.now().minute*60+datetime.datetime.now().second s=max(hous_list[0]*36+24*3600-n,5)returnselse:continue#定时循环获取cookie并保存whileTrue:#获取cookiecookie=driver.get_cookies()cookieValue=''foritemincookie:cookieValue+=item['name']+'='+item['value']+';'#保存cookieprint(cookieValue)#将cookie保存到指定路径的文件中os.system("""echo '%s' >D:/铭专用/cookies.txt"""%(cookieValue))#根据配置好的时间列表,获取需等待时间t=update_sleep_time()print("等待%s秒后刷新页面"%(t))time.sleep(t)#刷新页面driver.refresh()#等待足够的时间,确保网页已全部渲染time.sleep(12)

2、在Linux系统

在Linux系统,要注意先配置浏览器的参数,设置无痕浏览。另外考虑到调试时无法看到网页,且正式运行时可能存在服务器渲染网页的不稳定,我们引入了网页扫描机制。

fromseleniumimportwebdriverfromselenium.webdriver.chrome.serviceimportService#用于构建网页的扫描机制importselenium.webdriver.support.uiasui ,linux版,应使用无痕浏览器 profile.add_argument("-headless")#网页最大化profile.add_argument("--kiosk")profile.add_argument('--no-sandbox')profile.add_argument('--disable-dev-shm-usage')profile.add_argument('--disable-gpu')#指定火狐浏览器驱动的路径s=Service(r"/data/app/seleniumdriver/geckodriver")#调用火狐浏览器打开1个标签页driver=webdriver.Firefox(service=s,options=profile)#等待3秒,确保标签页已打开driver.implicitly_wait(5)#打开指定网页driver.get('https://xxxxx0-my.sharepoint.com/personal/chenhm21_xxxxx_com/_layouts/15/onedrive.aspx')#等待3秒,确保网页已完成渲染time.sleep(3)#配置扫描机制,N秒内每隔500毫秒扫描1次页面变化wait=ui.WebDriverWait(driver,30)

其它地方和在Windows系统相差不大,完整的代码如下:

fromseleniumimportwebdriverimporttime#用于引用驱动的路径fromselenium.webdriver.chrome.serviceimportServiceimportdatetime#用于构建网页的扫描机制importselenium.webdriver.support.uiasuiimportos#通过By定位来调用网页的元素fromselenium.webdriver.common.byimportBy#配置浏览器的参数profile=webdriver.FirefoxOptions()#设置无痕,linux版,应使用无痕浏览器profile.add_argument("-headless")#网页最大化profile.add_argument("--kiosk")profile.add_argument('--no-sandbox')profile.add_argument('--disable-dev-shm-usage')profile.add_argument('--disable-gpu')#指定火狐浏览器驱动的路径s=Service(r"/data/app/seleniumdriver/geckodriver")#调用火狐浏览器打开1个标签页driver=webdriver.Firefox(service=s,options=profile)#等待3秒,确保标签页已打开driver.implicitly_wait(5)#打开指定网页driver.get('https://xxxxx0-my.sharepoint.com/personal/chenhm21_xxxxx_com/_layouts/15/onedrive.aspx')#等待3秒,确保网页已完成渲染time.sleep(3)#配置扫描机制,N秒内每隔500毫秒扫描1次页面变化wait=ui.WebDriverWait(driver,30)#输入账号print("准备输入")##调用扫描机制,来锁定网页中的元素,直至找到或者扫描时间耗尽d1=wait.until(lambdadriver:driver.find_element(by='id',value="i0116"))##在锁定元素中输入信息d1.send_keys("这里填写对应账号")d2=wait.until(lambdadriver:driver.find_element(by='id',value="idSIButton9"))##点击指定元素driver.execute_script("arguments[0].click();",d2)print("已输入账号")##等待3秒,确保网页已跳转下一页面,并完成渲染time.sleep(3)#输入密码d3=wait.until(lambdadriver:driver.find_element(by='id',value="i0118"))d3.send_keys("这里填写对应账号的密码")d4=wait.until(lambdadriver:driver.find_element(by='id',value="idSIButton9"))driver.execute_script("arguments[0].click();",d4)print("开始登录")print(datetime.datetime.now())time.sleep(5)print(datetime.datetime.now())#确定通过手机短信验证##调用扫描机制,来锁定网页中的元素,直至找到或者扫描时间耗尽;通过class name来锁定元素d5=wait.until(lambdadriver:driver.find_element(by=By.CLASS_NAME,value="table"))print(datetime.datetime.now())print("点击手机短信验证")driver.execute_script("arguments[0].click();",d5)print(datetime.datetime.now())##将当前页面保存成图片driver.get_screenshot_as_file('tp.png')#配置验证码,填入手机短信收到的验证码yanzhengma=input('请输入验证码:')#输入验证码d6=wait.until(lambdadriver:driver.find_element(by='id',value="idTxtBx_SAOTCC_OTC"))d6.send_keys(yanzhengma)#点击验证d7=wait.until(lambdadriver:driver.find_element(by='id',value="idSubmit_SAOTCC_Continue"))driver.execute_script("arguments[0].click();",d7)print("已验证")time.sleep(3)#选择是否保持登录状态try:##打勾,选择保持d8=wait.until(lambdadriver:driver.find_element(by='id',value="KmsiCheckboxField"))driver.execute_script("arguments[0].click();",d8)print("选择保存默认登录")##点击下一步d9=wait.until(lambdadriver:driver.find_element(by='id',value="idSIButton9"))driver.execute_script("arguments[0].click();",d9)print("点击确认")time.sleep(12)exceptExceptionase:print("失败原因",e)print("没有进入登录选项界面")pass#定时更新和获取,确保cookie可用defupdate_sleep_time():#更新时间列表,小时分钟hous_list=[100,1100,2100]count=0hm=datetime.datetime.now().hour*100+datetime.datetime.now().minuteforhinhous_list:count+=1ifh>hm:n=datetime.datetime.now().hour*3600+datetime.datetime.now().minute*60+datetime.datetime.now().second s=max(h*36-n,5)returnsbreakelifcount==len(hous_list):n=datetime.datetime.now().hour*3600+datetime.datetime.now().minute*60+datetime.datetime.now().second s=max(hous_list[0]*36+24*3600-n,5)returnselse:continue#定时循环获取cookie并保存whileTrue:#获取cookiecookie=driver.get_cookies()cookieValue=''foritemincookie:cookieValue+=item['name']+'='+item['value']+';'#保存cookieprint(cookieValue)#将cookie保存到指定路径的文件中os.system("""echo '%s' >/data/insideJPY/chenhm21/99-ex_file/cookies"""%(cookieValue))#根据配置好的时间列表,获取需等待时间t=update_sleep_time()print("等待%s秒后刷新页面"%(t))time.sleep(t)#刷新页面driver.refresh()#等待足够的时间,确保网页已全部渲染time.sleep(12)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/6 21:34:29

VsCode更换MarkDown样式到底能有多好看?

vs code到底有多强大? 先看看MarkDown笔记的预览效果这只是一种插件 谁再让我用别的软件写代码 我就把这篇文章扔过去 如何操作? 1、安装插件:在扩展中搜索Markdown Preview Enhance2、点击【扩展设置】3、点击【查看】—【命令面板】4、在搜…

作者头像 李华
网站建设 2026/7/6 21:34:16

Go代码混淆实战:garble与现代Go模块的高效集成指南

Go代码混淆实战:garble与现代Go模块的高效集成指南 【免费下载链接】garble Obfuscate Go builds 项目地址: https://gitcode.com/gh_mirrors/ga/garble 在当今商业软件开发的激烈竞争中,保护源代码知识产权已成为开发者必须面对的重要课题。虽然…

作者头像 李华
网站建设 2026/7/6 21:34:01

抖音,你所不知道的功能

目录: 一、抖音账号检测 二、抖音内容AI生成 1、关键词生成与文案的写作 2、AI软件介绍 3、文心一言 三、抖音官方资料 1、资料截图 2、抖音流量推送机制 四、验证作品的质量 五、查找热歌、热点 1、热歌 2、热点 六、如何给账号打标签 七、视频运营 …

作者头像 李华
网站建设 2026/7/6 21:33:45

2.1.3工具篇-Excel——用Excel统计和分析数据

2.1.3工具篇-Excel——用Excel统计和分析数据一、核心函数的实战运用1. IF函数:条件判断的小能手2. COUNTIFS & SUMIFS家族:多条件计数与求和3. VLOOKUP(垂直查找匹配数据)4. MATCH(查找数据所处相对位置&#xff…

作者头像 李华
网站建设 2026/7/6 21:33:30

Java单列集合——Set

目录 一. Set 集合的特点 二. Set 集合的实现类 三. Set 接口中的方法 四. Set 的三种遍历方法 五. HashSet 底层原理 六. 关于HashSet的几个问题 七. LinkedHashSet底层原理 八. TreeSet详解 九. 单列集合的使用场景 上帖 Java单列集合——List 我们讲述了 Java 中的…

作者头像 李华
网站建设 2026/7/6 21:33:20

收藏!小白程序员必看:2026年AI产品经理如何突破职业天花板?

文章分析了2026年AI产品经理市场的分化现状,指出工具层趋于饱和,战略层需求饥渴。文章提出了三种AI PM成长路径:技术深化型、垂直领域型和商业化型,并强调了AI系统设计思维、AI评估与迭代能力、跨职能协作能力、伦理与风险意识、持…

作者头像 李华