0x01 前言
腾讯在线文档是非常方便的软件,可以自定义等等。如果想自动打开,或大量修改数据可以使用python脚本实现。以前腾讯在线文档域名会有&c=XX,点击那个单元格会更改为单元格的行列,但腾讯文档的更新使域名中不会出现这个后缀,造成不能使用后缀进行更改单元格内容了,于是google了以下,发现python使用模拟鼠标键盘行为依然可以实现对腾讯在线文档的修改,于是开始设计脚本。
0x02 功能介绍
Tide安全团队的小伙伴每天都会把自己的学习过程及学习成功更新到语雀中,lmn设计的一个小程序可以每天获取一次当天在某个语雀知识库中的更新文章,https://www.yuque.com/tidesec/wiki/gku6k7
为了方便对文章进行整理,dream实现了将文章更新到腾讯在线文档中的脚本。
Tide安全团队Wiki知识库:https://www.yuque.com/tidesec
0x03 功能实现
第一个功能对腾讯文档进行更新内容,因为lmn在语雀整理文章时已经写入txt文本文档中,我直接读取文本文档即可。
在读取txt到list中,会出现\n和空行的出现,在输入腾讯文档时能造成错误。
于是在读入list中将\n进行去除,先去除文件内的空行。
def txt_os():
file1 = open('wiki.txt', 'r', encoding='utf-8')
file2 = open('wiki2.txt', 'w', encoding='utf-8')
for line in file1.readlines():
if line == '\n':
line = line.strip("\n")
file2.write(line)
print('输出成功....')
file1.close()
file2.close()
然后将list每个元素后面的\n进行去除。
def txt_to_list():
file = open("wiki2.txt","r",encoding='utf-8')
list = file.readlines()
list = [x.strip() for x in list if x.strip() != '']
print(list)
return list
这里返回list是为了腾讯文档的函数中进行读取。
对腾讯文档进行修改的话,需要使用chromedriver。
先进行qq的登陆,使用python进行模拟鼠标点击和键盘输入。
find_element_by_id中的都为按钮或div的名字,在f12中可以搜到,这样就可以对元素进行定位了。
def tx_write():
list = txt_to_list()
driver = webdriver.Chrome('C:\\Users\\missm\\AppData\\Local\\Google\\Chrome\\Application\\chromedriver.exe')
driver.get("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
time.sleep(4)
driver.find_element_by_id("blankpage-button-pc").click()
time.sleep(3)
driver.find_element_by_id("qq-tabs-title").click()
driver.implicitly_wait(10)
driver.switch_to.frame("login_frame")
try:
driver.find_element_by_id("img_out_3458589503").click()
print("快捷登录成功")
except:
driver.find_element_by_id("switcher_plogin").click()
time.sleep(1)
driver.find_element_by_id("u").send_keys("qq号")
driver.find_element_by_id("p").send_keys("qq密码")
driver.find_element_by_id("login_button").click()
print("账号登录成功")
time.sleep(5)
driver.switch_to.parent_frame()
time.sleep(1)
driver.maximize_window()
time.sleep(1)
driver.find_element_by_xpath('//*[@id="canvasContainer"]/div[1]/div[2]').click()
time.sleep(0.5)
然后对腾讯文档进行添加。
j = 0
for i in range(int(len(list)/7)):
driver.find_element_by_id('alloy-simple-text-editor').send_keys(Keys.HOME)
driver.find_element_by_id('alloy-simple-text-editor').send_keys(Keys.CONTROL, Keys.UP)
driver.find_element_by_id('alloy-simple-text-editor').send_keys(Keys.ENTER)
driver.find_element_by_id('alloy-simple-text-editor').send_keys(Keys.ENTER)
driver.find_element_by_id('alloy-simple-text-editor').send_keys(Keys.TAB)
driver.find_element_by_id('alloy-simple-text-editor').send_keys(Keys.TAB)
for i in range(99999):
b = list[j+2]
a = driver.find_element_by_xpath('//*[@id="alloy-simple-text-editor"]').text
if a == b[5:]:
j = j + 7
break
if a != '':
driver.find_element_by_id('alloy-simple-text-editor').send_keys(Keys.ENTER)
else:
break
if a == b[5:]:
continue
driver.find_element_by_id('alloy-simple-text-editor').send_keys(Keys.HOME)
driver.find_element_by_id('alloy-simple-text-editor').click()
s = driver.find_element_by_xpath('/html/body/div[3]/div/div[4]/div[2]/div/div/div[1]/div/div/div[1]/div[1]').text
a = s[1:]
a = int(a)
a = a - 2
str(a)
driver.find_element_by_id('alloy-simple-text-editor').send_keys(a)
driver.find_element_by_id('alloy-simple-text-editor').send_keys(Keys.TAB)
driver.find_element_by_id('alloy-simple-text-editor').click()
b = list[j+1]
driver.find_element_by_id('alloy-simple-text-editor').send_keys(b[5:])
driver.find_element_by_id('alloy-simple-text-editor').send_keys(Keys.TAB)
driver.find_element_by_id('alloy-simple-text-editor').click()
c = list[j+2]
driver.find_element_by_id('alloy-simple-text-editor').send_keys(c[5:])
driver.find_element_by_id('alloy-simple-text-editor').send_keys(Keys.TAB)
driver.find_element_by_id('alloy-simple-text-editor').click()
d = list[j+3]
driver.find_element_by_id('alloy-simple-text-editor').send_keys(d[7:])
driver.find_element_by_id('alloy-simple-text-editor').send_keys(Keys.TAB)
driver.find_element_by_id('alloy-simple-text-editor').click()
e = list[j+4]
driver.find_element_by_id('alloy-simple-text-editor').send_keys(e[5:16])
driver.find_element_by_id('alloy-simple-text-editor').send_keys(Keys.TAB)
driver.find_element_by_id('alloy-simple-text-editor').click()
f = list[j+5]
driver.find_element_by_id('alloy-simple-text-editor').send_keys(f[5:16])
driver.find_element_by_id('alloy-simple-text-editor').send_keys(Keys.TAB)
driver.find_element_by_id('alloy-simple-text-editor').click()
g = list[j+6]
driver.find_element_by_id('alloy-simple-text-editor').send_keys(g[5:])
driver.find_element_by_id('alloy-simple-text-editor').send_keys(Keys.TAB)
driver.find_element_by_id('alloy-simple-text-editor').click()
j = j + 7;
time.sleep(1)
print('输入成功')
添加成功。
完整代码如下:
import os
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
def txt_os():
file1 = open('wiki.txt', 'r', encoding='utf-8')
file2 = open('wiki2.txt', 'w', encoding='utf-8')
for line in file1.readlines():
if line == '\n':
line = line.strip("\n")
file2.write(line)
print('输出成功....')
file1.close()
file2.close()
def txt_to_list():
file = open("wiki2.txt","r",encoding='utf-8')
list = file.readlines()
list = [x.strip() for x in list if x.strip() != '']
print(list)
return list
def tx_write():
list = txt_to_list()
driver = webdriver.Chrome('C:\\Users\\missm\\AppData\\Local\\Google\\Chrome\\Application\\chromedriver.exe')
driver.get("https://docs.qq.com/sheet/DUmJmaG9ma2JtTWhE?tab=BB08J2")
time.sleep(4)
driver.find_element_by_id("blankpage-button-pc").click()
time.sleep(3)
driver.find_element_by_id("qq-tabs-title").click()
driver.implicitly_wait(10)
driver.switch_to.frame("login_frame")
try:
driver.find_element_by_id("img_out_3458589503").click()
print("快捷登录成功")
except:
driver.find_element_by_id("switcher_plogin").click()
time.sleep(1)
driver.find_element_by_id("u").send_keys("2064662418")
driver.find_element_by_id("p").send_keys("mhw1724282931")
driver.find_element_by_id("login_button").click()
print("账号登录成功")
time.sleep(5)
driver.switch_to.parent_frame()
time.sleep(1)
driver.maximize_window()
time.sleep(1)
driver.find_element_by_xpath('//*[@id="canvasContainer"]/div[1]/div[2]').click()
time.sleep(0.5)
j = 0
for i in range(int(len(list)/7)):
driver.find_element_by_id('alloy-simple-text-editor').send_keys(Keys.HOME)
driver.find_element_by_id('alloy-simple-text-editor').send_keys(Keys.CONTROL, Keys.UP)
driver.find_element_by_id('alloy-simple-text-editor').send_keys(Keys.ENTER)
driver.find_element_by_id('alloy-simple-text-editor').send_keys(Keys.ENTER)
driver.find_element_by_id('alloy-simple-text-editor').send_keys(Keys.TAB)
driver.find_element_by_id('alloy-simple-text-editor').send_keys(Keys.TAB)
for i in range(99999):
b = list[j+2]
a = driver.find_element_by_xpath('//*[@id="alloy-simple-text-editor"]').text
if a == b[5:]:
j = j + 7
break
if a != '':
driver.find_element_by_id('alloy-simple-text-editor').send_keys(Keys.ENTER)
else:
break
if a == b[5:]:
continue
driver.find_element_by_id('alloy-simple-text-editor').send_keys(Keys.HOME)
driver.find_element_by_id('alloy-simple-text-editor').click()
s = driver.find_element_by_xpath('/html/body/div[3]/div/div[4]/div[2]/div/div/div[1]/div/div/div[1]/div[1]').text
a = s[1:]
a = int(a)
a = a - 2
str(a)
driver.find_element_by_id('alloy-simple-text-editor').send_keys(a)
driver.find_element_by_id('alloy-simple-text-editor').send_keys(Keys.TAB)
driver.find_element_by_id('alloy-simple-text-editor').click()
b = list[j+1]
driver.find_element_by_id('alloy-simple-text-editor').send_keys(b[5:])
driver.find_element_by_id('alloy-simple-text-editor').send_keys(Keys.TAB)
driver.find_element_by_id('alloy-simple-text-editor').click()
c = list[j+2]
driver.find_element_by_id('alloy-simple-text-editor').send_keys(c[5:])
driver.find_element_by_id('alloy-simple-text-editor').send_keys(Keys.TAB)
driver.find_element_by_id('alloy-simple-text-editor').click()
d = list[j+3]
driver.find_element_by_id('alloy-simple-text-editor').send_keys(d[7:])
driver.find_element_by_id('alloy-simple-text-editor').send_keys(Keys.TAB)
driver.find_element_by_id('alloy-simple-text-editor').click()
e = list[j+4]
driver.find_element_by_id('alloy-simple-text-editor').send_keys(e[5:16])
driver.find_element_by_id('alloy-simple-text-editor').send_keys(Keys.TAB)
driver.find_element_by_id('alloy-simple-text-editor').click()
f = list[j+5]
driver.find_element_by_id('alloy-simple-text-editor').send_keys(f[5:16])
driver.find_element_by_id('alloy-simple-text-editor').send_keys(Keys.TAB)
driver.find_element_by_id('alloy-simple-text-editor').click()
g = list[j+6]
driver.find_element_by_id('alloy-simple-text-editor').send_keys(g[5:])
driver.find_element_by_id('alloy-simple-text-editor').send_keys(Keys.TAB)
driver.find_element_by_id('alloy-simple-text-editor').click()
j = j + 7;
time.sleep(1)
print('输入成功')
driver.close()
if __name__ == "__main__":
txt_os()
txt_to_list()
tx_write()
Tide安全团队正式成立于2019年1月,是新潮信息旗下以互联网攻防技术研究为目标的安全团队,团队致力于分享高质量原创文章、开源安全工具、交流安全技术,研究方向覆盖网络攻防、系统安全、Web安全、移动终端、安全开发、物联网/工控安全/AI安全等多个领域。
团队作为“省级等保关键技术实验室”先后与哈工大、齐鲁银行、聊城大学、交通学院等多个高校名企建立联合技术实验室。团队公众号自创建以来,共发布原创文章370余篇,自研平台达到26个,目有15个平台已开源。此外积极参加各类线上、线下CTF比赛并取得了优异的成绩。如有对安全行业感兴趣的小伙伴可以踊跃加入或关注我们。