腾讯、飞书等在线表格自动化编辑--python
编辑在线表格
- 一 目的
- 二 实现效果
- 三 实现过程简介
- 1、本地操作表格之后进入导入在线文档
- 2、直接操作在线文档
- 四 实现步骤讲解
- 1、实现方法的选择
- 2、导入类库
- 3、设置浏览器代理直接操作已打开浏览器
- 4、在线文档登录
- 5、在线文档表格数据操作
- 6、行数不够自动添加行数
- 五 代码实现
- 小结
一 目的
我们在工作中时长会用到一些在线表格实现多人协作,但是有事会遇到一些例如数据的录入等人工操作过于麻烦,或者需要周期性的操作,我们希望使用自动化的方式在指定的数据源获取数据然后按照指定的要求填入在线表格
二 实现效果
【GIF】
三 实现过程简介
有两种实现方式:
1、本地操作表格之后进入导入在线文档
本地实现表格的操作就不多说,有多种方式来实现,无非是导入在线表格,这里我们也是需要提前登录才行,一般的上传导入重名也不会出现覆盖的情况所以我们相当于生成一个新的表格,
在操作之前我们可以下载旧的表格数据,再次基础上进行操作
然后再上传导入,导入之前记得删除原表格
2、直接操作在线文档
实现在线文档的编辑三步走:
1、设置浏览器和代理调用UI自动化操作的时候直接操作已打开的浏览器
2、登录在线文档:在打开的浏览器打开并登录在线文档--此文直接进入需要操作的文档
3、通过键盘操作来实现文档内容的增删改查【登录用户要具备相应的权限】
本文只要讲解第二种方式。
四 实现步骤讲解
1、实现方法的选择
在接到需求的时候首先想到的就是接口的方式,没办法谁让它最为习惯也最为稳定呢,但是在调研过程中发现两个比价难以突破的问题:
1、接口请求时需要使用cookie,存在多个cookie而且有时效性,无法实现保持可用cookie
2、在线表格内容发生变更接口保存数据后分析难度比较高
最终放弃此方式,因为本身对自动化有所研究就考虑使用UI自动化的方式来实现,有存在新的问题
1、登录:UI自动化打开新网页需要登录【已解决】
2、表格内容属于画布里面,只能定位到画布,画布内部无法精确定位到每个表格【已解决】
2、导入类库
from selenium import webdriver #调用webdriver
from selenium.webdriver.chrome.options import Options #设置浏览器初始化内容
from selenium.webdriver.common.by import By #定位元素
from selenium.webdriver.common.keys import Keys #键盘操作
3、设置浏览器代理直接操作已打开浏览器
保持登录–取巧:发现在线文档只要登录之后不主动退出/长时间不操作则都可以一直保持登录,那我们就可以直接操作已经登录的在线文档不就好啦,但是用过selenium的都知道,调用webdriver默认会打开一个纯净的浏览器,后来想到一个就是我不打开新的浏览器,直接操作已经打开的浏览器是不是就能实现。
下面是实现过程:
(1)打开浏览器设置端口调试代理和数据存储:
# 进入浏览器的安装目录中【可以在任务管理器跳转过去】打开CMD窗口执行下面命令既可【注意端口号和用户数据存储位置是可以改的】
chrome.exe --remote-debugging-port=9222 --user-data-dir="G:\test"
#9222 是端口号,最好不要和本机其他端口号冲突,G:\test打开的浏览器用户数据存储,这里设置一个存在的目录既可
#回车之后会打开一个空白的浏览器,在这个浏览器上登录就行,
(2)webdriver的初始化中写入调试的数据就可以操作打开的浏览器,而不是重新打开新的
chrome_options = Options()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
此时再执行脚本就是操作我们上面打开的浏览器,不是冲洗打开空白浏览器啦
4、在线文档登录
没啥可多说的,上一步打开的浏览器扫码之类的登录就行
5、在线文档表格数据操作
本来想着修改哪一行数据直接定位哪一行双击修改既可,但是出现了一个小意外:表格是在一个画布上,想定位画布上的表格发现不能进行下一步的定位啦,这让我毫升的郁闷呢
最终查阅了一些资料找寻到了两种可行的办法
(1)坐标定位
我们可以定位到画布,画布是有坐标的,我们可以通过不断变更坐标的位置来实现表格定位,
但是有一个弊端,如果表格大小发生变更了,那之前的坐标都需要调整,而且还要手动去滑动表格
ele = 画布定位
ActionChains(driver).move_to_element_with_offset(ele,X,Y).send_keys('输入内容')
最终此种方法不好用被舍弃
(2)通过键盘的操作
发现我们可以通过剪片的HOME键、TAB键、ENTER键,以及上下键实现表格定位
在表格的最上方输入框是在画布之外的可以进行增删改查等操作
driver.find_element(By.XPATH, '//*[@id="alloy-simple-text-editor"]').send_keys(Keys.HOME)
driver.find_element(By.XPATH, '//*[@id="alloy-simple-text-editor"]').send_keys(Keys.CONTROL, Keys.UP)
driver.find_element(By.XPATH, '//*[@id="alloy-simple-text-editor"]').send_keys(Keys.ENTER)
driver.find_element(By.XPATH, '//*[@id="alloy-simple-text-editor"]').send_keys(Keys.TAB)
然后我们根据获取到的数据来进行判断、修改、删除等操作,也可以进行追加写入,一般是按行写入
# 这是每行需要写入的数据,当前就设置了一行,如果更多的话使用列表就行
list = [1,2,3,54]
# 获取第一列数据
driver.find_element(By.XPATH,'//*[@id="alloy-simple-text-editor"]').click()
txt = driver.find_element(By.XPATH,'//*[@id="alloy-simple-text-editor"]/p').text
# 判断为空输入数据,否则进入下一行,追加的方式添加数据
if txt =='':for i in range(len(list)):driver.find_element(By.XPATH, '//*[@id="alloy-simple-text-editor"]/p').send_keys(list[i])driver.find_element(By.XPATH,'//*[@id="alloy-simple-text-editor"]').send_keys(Keys.TAB)#进入下一个单元格
driver.find_element(By.XPATH, '//*[@id="alloy-simple-text-editor"]').send_keys(Keys.ENTER) # 进入下一个行
6、行数不够自动添加行数
我们都知道插入数据的时候在线表格一般只加载200行,需要更多就自己添加,这里我们就可以使用最下方的添加按钮添加行,当然我们要检测出现添加按钮–也就是到最后一行之后才点击添加
# 行数不够添加行数try:driver.find_element(By.XPATH, '//*[text()="添加"]').click()except:print('不需要扩展列表')
五 代码实现
完整代码
# -*- coding: utf-8 -*-
'''
@Time : 2023/7/12 15:39
@File : 在线文档写入数据.py
''''''
实现在线文档的编辑三步走:
1、设置浏览器和代理调用UI自动化操作的时候直接操作已打开的浏览器
2、登录在线文档:在打开的浏览器打开并登录在线文档--此文直接进入需要操作的文档
3、通过键盘操作来实现文档内容的增删改查【登录用户要具备相应的权限】
'''
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys# 文件存储位置打开浏览器
# chrome.exe --remote-debugging-port=9222 --user-data-dir="G:\test"chrome_options = Options()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
driver = webdriver.Chrome(options=chrome_options)
driver.get('https://docs.qq.com/sheet/DTEtLSW5NWldEcWJE?tab=gqke19')
print(driver.title)j = 0 #使用变量来定位列表# 移动焦点到第一行第一列
driver.find_element(By.XPATH, '//*[@id="alloy-simple-text-editor"]').send_keys(Keys.HOME)
driver.find_element(By.XPATH, '//*[@id="alloy-simple-text-editor"]').send_keys(Keys.CONTROL, Keys.UP)
driver.find_element(By.XPATH, '//*[@id="alloy-simple-text-editor"]').send_keys(Keys.ENTER)
driver.find_element(By.XPATH, '//*[@id="alloy-simple-text-editor"]').send_keys(Keys.TAB)
# 这是每行需要写入的数据,当前就设置了一行,如果更多的话使用列表就行
list = [1,2,3,54]for i in range(300):#循环行,这里是操作最大行数driver.find_element(By.XPATH, '//*[@id="alloy-simple-text-editor"]').send_keys(Keys.HOME) #先跳到当前行的第一列driver.find_element(By.XPATH, '//*[@id="alloy-simple-text-editor"]').click()s = driver.find_element(By.XPATH,'//*[@class="bar-label"]').text #获取此行的行数a = int(s[1:])-1 #将A**去除A,留下数字,如果你的排序为行的相差则减去几即可print(a)# 获取第一列数据driver.find_element(By.XPATH,'//*[@id="alloy-simple-text-editor"]').click()txt = driver.find_element(By.XPATH,'//*[@id="alloy-simple-text-editor"]/p').text# 判断为空输入数据,否则进入下一行,追加的方式添加数据if txt =='':for i in range(len(list)):driver.find_element(By.XPATH, '//*[@id="alloy-simple-text-editor"]/p').send_keys(list[i])driver.find_element(By.XPATH,'//*[@id="alloy-simple-text-editor"]').send_keys(Keys.TAB)#进入下一个单元格driver.find_element(By.XPATH, '//*[@id="alloy-simple-text-editor"]').send_keys(Keys.ENTER) # 进入下一个行# 行数不够添加行数try:driver.find_element(By.XPATH, '//*[text()="添加"]').click()except:print('不需要扩展列表')
小结
相关文章:

腾讯、飞书等在线表格自动化编辑--python
编辑在线表格 一 目的二 实现效果三 实现过程简介1、本地操作表格之后进入导入在线文档2、直接操作在线文档 四 实现步骤讲解1、实现方法的选择2、导入类库3、设置浏览器代理直接操作已打开浏览器4、在线文档登录5、在线文档表格数据操作6、行数不够自动添加行数 五 代码实现小…...
开源库nlohmann json使用备忘
nlohmann/json是一个用于解析JSON的开源C库,口碑一流,无需额外安装其他第三方库,还支持单个头文件模式,使用起来非常方便直观。 1. 编译 从官网https://github.com/nlohmann/json的Release页面下载单个json.hpp即可直接使用&…...
语音识别开源框架 openAI-whisper
Whisper 是一种通用的语音识别模型。 它是OpenAI于2022年9月份开源的在各种音频的大型数据集上训练的语音识别模型,也是一个可以执行多语言语音识别、语音翻译和语言识别的多任务模型。 GitHub - yeyupiaoling/Whisper-Finetune: 微调Whisper语音识别模型和加速推理…...
php做的中秋博饼游戏之绘制骰子图案功能示例
先看代码 header(Content-Type:image/png); $img imagecreatetruecolor(200, 200); $white imagecolorallocate($img, 255, 255, 255); $grey imagecolorallocate($img, 100, 100, 100); $blue imagecolorallocate($img, 0, 102, 255); $red imagecolorallocate($img, …...
erlang 虚拟机优化参数
sbwt none 将CPU忙等待关闭将有助于降低系统显示的CPU使用率,因为开启了忙等待的BEAM,CPU负载并不代表真实的工作情况; K true 开启epoll IO模型 swt low Sets scheduler wakeup threshold. Defaults to medium. The thresh…...

网络安全能力成熟度模型介绍
一、概述 经过多年网络安全工作,一直缺乏网络安全的整体视角,网络安全的全貌到底是什么,一直挺迷惑的。目前网络安全的分类和厂家非常多,而且每年还会冒出来不少新的产品。但这些产品感觉还是像盲人摸象,只看到网络安…...
python爬虫试手
同事让帮忙在某个网站爬点数据,首次尝试爬虫,遇到的问题及解决思路记录下。 大体需求是需要爬取详情页内的信息,详情页有一定格式规律,但是详情页需要从列表页跳入,列表页中的每一条记录需要鼠标悬停才会弹出跳转链接…...

pandas 笔记:pivot_table 数据透视表
1 基本使用方法 pandas.pivot_table(data, valuesNone, indexNone, columnsNone, aggfuncmean, fill_valueNone, marginsFalse, dropnaTrue, margins_nameAll, observedFalse, sortTrue)2 主要参数 dataDataFramevalues要进行聚合的列index在数据透视表索引(index…...

C#(六十)之Convert类 和 Parse方法的区别
Convert数据类型转换类,从接触C#开始,就一直在用,这篇日志坐下深入的了解。 Convert类常用的类型转换方法 方法 说明 Convert.ToInt32() 转换为整型(int) Convert.ToChar() 转换为字符型(char) Convert.ToString() 转换为字符串型(st…...

暑期代码每日一练Day3:874. 模拟行走机器人
题目 874. 模拟行走机器人 分析 这道题就是个简单的模拟 主要有两点考察点: 对方向数组的运用 方向数组存储的是各个方向的单位向量,也即: 方向XY向北01向东10向南0-1向西-10 存储在数组中,则是方向数组: in…...
肖sir___环境相关的面试题
环境相关面试题 1、请简述多有米环境的搭建、用到了哪些工具和流程介绍? jdk、服务器、代码包、数据库 2、查看当前端口被哪个应用程序占用了? netstat -ntlp |grep 端口号 lsof -i :端口号 ps -ef|grep 端口号 3、Tomcat和Nginx的区别,ngi…...
代理IP、Socks5代理和SK5代理的前沿技术与未来发展趋势
代理IP的前沿技术应用 人工智能与智能代理:结合人工智能技术,代理IP可以更加智能地处理网络请求和数据流,提高代理效率和准确性。区块链与去中心化代理:通过区块链技术,代理IP可以实现去中心化管理和身份验证…...

VM(CentOS7安装和Linux连接工具以及换源)
目录 一、Linux意义 二、安装VMWare 三、centos7安装 1、正式安装CentOS7: 2、安装不了的解决方案 2.1常见问题——虚拟机开机就黑屏的完美解决办法 3、查看、设置IP地址 ① 查看ip地址:ip addr 或者 ifconfig, 注意与windows环境的区别…...
阿里云斩获 4 项年度云原生优秀案例丨阿里云云原生 6 月动态
云原生月度动态 ✦ CLOUD NATIVE 云原生是企业数字创新的最短路径。 《阿里云云原生每月动态》,从趋势热点、产品新功能、服务客户、开源与开发者动态等方面,为企业提供数字化的路径与指南。 本栏目每月更新。 01 趋势热点 🥇 阿里云 S…...
dede图片集上传图片时出错显示FILEID的解决办法
如果遇到过这问题的,就可以照此方法尝试了。 某日,某使用deecms v5.5的网站在后台上传图片时出现如下错误: 作为web生手的我很是迷茫。印象里之前并没有做什么改动,于是百思不得其解。Google、百度、DeDe官网搜索了一大圈…...
【亲测有效】 通过mysql指令 导出数据库中表名 和 表名的备注
标题你可以使用以下MySQL指令来导出数据库中表名和表名的备注: SELECT table_name, table_comment FROM information_schema.tables WHERE table_schema 你的数据库名;将上述指令中的"你的数据库名"替换为你实际使用的数据库名称,执行该指…...
【Nginx08】Nginx学习:HTTP核心模块(五)长连接与连接处理
Nginx学习:HTTP核心模块(五)长连接与连接处理 HTTP 基础知识大家掌握的怎么样呀?对于长连接这一块的内容应该也不是什么新鲜东西了吧。毕竟 HTTP1.1 都已经发布这么久了。今天主要来看的就是长连接相关的配置,另外还会…...

第八十五天学习记录:C++核心:内存分区模型
内存分区模型 C程序在执行时,将内存大方向划分为4个区域 1、代码区:存放函数体的二进制代码,由操作系统进行管理 2、全局区:存放全局变量和静态变量以及常量 3、栈区:由编译器自动分配释放,存放函数的参数…...
Chrome远程调试webview
网址 谷歌远程调试解决方案 https://blog.csdn.net/m0_56516186/article/details/131260563Chrome远程调试webview https://blog.csdn.net/weixin_44801980/article/details/117755550...

爬虫与反爬虫的攻防对抗
一、爬虫的简介 1 概念 爬虫最早源于搜索引擎,它是一种按照一定的规则,自动从互联网上抓取信息的程序,又被称为爬虫,网络机器人等。按爬虫功能可以分为网络爬虫和接口爬虫,按授权情况可以分为合法爬虫和恶意爬虫。恶…...

Sklearn 机器学习 缺失值处理 填充数据列的缺失值
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 💡使用 Scikit-learn 处理数据缺失值的完整指南 在机器学习项目中,数据缺失是不可避…...

【图片识别Excel】批量提取图片中的文字,图片设置识别区域,识别后将文字提取并保存Excel表格,基于WPF和OCR识别的应用
应用场景 在办公自动化、文档处理、数据录入等场景中,经常需要从大量图片中提取文字信息。例如: 批量处理扫描的表单、合同、发票等文档从图片集中提取特定区域的文字数据将纸质资料快速转换为电子文本并整理归档 通过设置识别区域,可以精…...

【Java微服务组件】分布式协调P4-一文打通Redisson:从API实战到分布式锁核心源码剖析
欢迎来到啾啾的博客🐱。 记录学习点滴。分享工作思考和实用技巧,偶尔也分享一些杂谈💬。 有很多很多不足的地方,欢迎评论交流,感谢您的阅读和评论😄。 目录 引言Redisson基本信息Redisson网站 Redisson应用…...

《绩效管理》要点总结与分享
目录 绩效管理与目标设定 绩效管理的循环:PDCA 绩效目标的设定要点 绩效设定的工具:SMART法则 绩效跟踪与评估 刻板印象:STAR法 晕轮效应:对比评价法 近因效应:关键事项评估表 绩效面谈 面谈前准备工作 汉堡…...
宝塔面板安装nodejs后,通过node -v获取不到版本号,报错node: command not found
如果在 宝塔面板 安装了 Node.js,但运行 node -v 或 npm -v 时提示 command not found,通常是因为 Node.js 的路径未正确添加到系统环境变量。以下是解决方法: 1. 确认 Node.js 是否安装成功 (1)检查宝塔面板的 Node.…...

【win | docker开启远程配置】使用 SSH 隧道访问 Docker的前操作
在主机A pycharm如何连接远程主机B win docker? 需要win docker配置什么? 快捷配置-主机B win OpenSSH SSH Server https://blog.csdn.net/z164470/article/details/121683333 winR,打开命令行,输入net start sshd,启动SSH。 或者右击我的电脑&#…...
Komiko 视频到视频功能炸裂上线!
Komiko 平台作为行业的创新先锋,近日宣布推出全新的视频到视频(Video-to-Video)功能,这一举措犹如一颗重磅炸弹,瞬间在漫画、动画和插画创作的世界里掀起了惊涛骇浪,进一步巩固了其作为 AI 驱动的一体化创作…...
光学字符识别(OCR)理论概述与实践教程
一、 光学字符识别(OCR)理论基础 OCR,即Optical Character Recognition,旨在通过计算机视觉和模式识别技术,将图像中包含的文本信息转换为机器可编辑、可搜索的文本数据。这项技术是实现信息数字化、自动化处理纸质或图像化文档的关键。 1. OCR处理管线 OCR系统通常采用…...

亚远景科技助力东风日产通过ASPICE CL2评估
热烈祝贺东风日产通过ASPICE CL2评估 近日,东风日产PK1B VCM热管理项目成功通过ASPICE CL2级能力评估,标志着东风日产在汽车电子软件研发管理体系及技术创新能力上已达到国际领先水平,为其全球化布局注入强劲动能。 ASPICE:国际竞…...
Druid连接池实现自定义数据库密码加解密功能详解
Druid连接池实现自定义数据库密码加解密功能详解 在企业级应用开发中,数据库密码的明文存储是一个显著的安全隐患。Druid作为阿里巴巴开源的高性能数据库连接池组件,提供了灵活的密码加密与解密功能,允许开发者通过自定义逻辑实现数据库密码…...