简 介: 讨论了在csdn的Markdown编译器中自动载入GIF文件的方法。使用了Python中的pyautogui软件包,可以通过Python的小程序实现一键将GIF文件载入CSDN的Markdown编译器的过程。

关键词pyautoguipythonCSDNMarkdownGIF

§01 模拟鼠标操作


  在Windows 程序操作中,使用鼠标操作可以完成大部分的操作。虽然鼠标没有键盘操作快和效率高,但比较直观。如果想自动完成程序的操作,可以借助于python对于鼠标的模拟来加速完成某些重复点击工作。

  比如在CSDNMarkdown编辑器中,它不支持对于GIF(动图)文件的文件粘贴,可以通过快捷键 CTRL+SHIFT+G打开图片输入对话框,然后调入需要输入的图片。

▲ 图1.1CSDN图片输入对话框

1、在CSDN Markdown编辑器中输入GIF图片

  为了将GIF文件输入到CSDNMarkdown编辑器,则需要顺序进行如下操作:

  • 按动快捷键 ctrl+shift+g,弹出“上传图片”对话框;
  • 点击“选择图”,打开文件对话框;
  • 在文件对话框中输入需要打开的GIF文件,点击“打开后,Markdown自动将GIF文件调入网站;
  • Markdown编辑器中对GIF文件编辑相关信息;

  如果使用Python语言编辑一个应用小程序,能够将GIF文件自动调入CSDN Markdown编辑器中,上述的各个过程中,除了需要使用快捷键,还需要使用鼠标点击“上传图片”按钮,因此需要模拟鼠标点击操作。

2、模拟鼠标操作

  根据 “simulate a mouse click python” Code Answer’s 中介绍。使用的 pyautogui 的python库,可以完成鼠标的模拟操作。

(1)安装pyautogui

  使用pip命令安装pyautogui软件包。

python -m pip install pyautogui

(2)测试程序

import pyautoguipyautogui.click(100, 100)
pyautogui.moveTo(100, 150)
pyautogui.moveRel(0, 10)  # move mouse 10 pixels down
pyautogui.dragTo(100, 150)
pyautogui.dragRel(0, 10)  # drag mouse 10 pixels down

§02 自动在CSDN中输入GIF文件


1、python命令程序

  运行下面程序,可以自动将GIF文件插入CSDN的Markdown编辑器。

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# CDPG.PY                     -- by Dr. ZhuoQing 2021-06-15
#
# Note:
#============================================================from head import *
import pyautoguicsdn_title = '写文章-CSDN博客'
open_title = "打开"#------------------------------------------------------------
picfile = r'd:\temp\gif1.gif'if len(sys.argv) > 1:picfile = sys.argv[1]if not os.path.isfile(picfile):picfile = os.path.join(r'd:\temp', picfile)
else:windowtitle = tspgetwindowtitle()for f in windowtitle:if f.find('GIF Movie Gear') >= 0:filename = f.split('-')[0].rstrip(' ')picfile = os.path.join(r'd:\temp', filename)break#------------------------------------------------------------
if not os.path.isfile(picfile):printf("%s is not file!\a")exit()#------------------------------------------------------------
rect = tspgetwindowrect(csdn_title)
tspsendwindowkey(csdn_title, 'g', control=1, shift=1, noreturn=1)
time.sleep(.5)
pyautogui.click((rect[0]+rect[2])//2, (rect[1]+rect[3])//2)
time.sleep(1)tspsendwindowkey(open_title, "n", alt=1, noreturn=1)
clipboard.copy(r'd:\temp\gif1.gif')
tspsendwindowkey(open_title, "v", control=1, noreturn=1)
tspsendwindowkey(open_title, "o", alt=1, noreturn=1)tspexecutepythoncmd('cdpp #')#------------------------------------------------------------
#        END OF FILE : CDPG.PY
#============================================================

2、程序的流程图

(1)确定GIF文件过程

  下面流程图是确定GIF文件名称的过程。

Created with Raphaël 2.3.0开始初始化GIF文件名d:\temp\gif1.gif是否有命令参数?将命令参数幅值给GIF文件名判断GIF文件是否存在?将GIF文件调入CSDN结束判断是否有Gear Movie程序?将Gear Movie文件赋予GIFyesnoyesnoyesno

(2)将GIF文件调入CSDN

  这个过程就是在前面给出的调用过程,只是其中应用到pyautogui的Mouse仿真过程,自动打开对话框将GIF文件调入CSDNMarkdown编译器。

※ 模拟操作结论 ※


  合理的 应用鼠标模拟,可以将一些界面操作变得更加的自动化。比如在CSDN中的Markdown已经非常方便了,但是如果为了进一步将其中的操作变得更加的便利,编写了基于pyautogui的自动GIF文件载入Python程序,可以大大方便面平时的GIF文件调入的全过程。


■ 相关文献链接:

  • “simulate a mouse click python” Code Answer’s

● 相关图表链接:

  • 图1.1 CSDN图片输入对话框
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# D2GIF.PY                     -- by Dr. ZhuoQing 2020-01-31
#
#   d2gif +                         # Change d:\temp\gif
#
#
#
# Note:
#============================================================from headm import *
import os
import pyautogui#------------------------------------------------------------
gifgear = 'GIF Movie Gear'
gear_title = gifgear
dialog = 'Insert Frame(s)'
resizeflag = 0
doubleopt = 0size5Mflag = 0                      #
gif5Msize = 5.0                     # Set size5M final size#------------------------------------------------------------
if __name__ == "__main__":rect = tspgetwindowrect(gifgear)gifgearflag = sum(rect)tspread()argn = len(list(sys.argv))#--------------------------------------------------------if gifgearflag != 0 and argn > 1:filename = 'd:\\temp\\' + sys.argv[1] + '.gif'printf(filename)if os.path.isfile(filename):width = 560if argn > 2:if sys.argv[2].isdigit():width = int(sys.argv[2])tspsendwindowkey(gifgear, "fr", alt=1, noreturn=1)time.sleep(.5)tspsendwindowkey(gifgear, "n", alt=1, noreturn=1)tspsendwindowkey(gifgear, "fi", alt=1, noreturn=1)time.sleep(.5)rect = tspgetwindowrect('位置不可用')if sum(rect) != 0:tspsendwindowkey("位置不可用", '\r')time.sleep(.5)clipboard.copy(filename)tspsendwindowkey(dialog, "n", alt=1, noreturn=1)tspsendwindowkey(dialog, "v", control=1, noreturn=1)tspsendwindowkey(dialog, "\r", noreturn=1)time.sleep(.5)for _ in range(100):tspsendwindowkey(gifgear, "at", alt=1, noreturn=1)time.sleep(.5)rect = tspgetwindowrect('Optimize Animation')if sum(rect) != 0: breakprintf('\a')if tspread()[2] != 0: exit()rect = tspgetwindowrect('Optimize Animation')if sum(rect) == 0: exit()for _ in range(100):time.sleep(.5)tspsendwindowkey('Optimize Animation', '\r', noreturn=1)printf('\a')rect = tspgetwindowrect('Optimize Animation')if sum(rect) == 0:breakif tspread()[2] != 0: exit()rect = tspgetwindowrect('Optimize Animation')if sum(rect) != 0: exit()tspsendwindowkey(gear_title, "s", control=1, shift=1, noreturn=1)time.sleep(0.25)clipboard.copy('GIF1.gif')tspsendwindowkey('Save As', 'v', control=1, noreturn=1)tspsendwindowkey('Save As', 's', alt=1, noreturn=1)tspsendwindowkey('Save As', 'y', alt=1, noreturn=1)time.sleep(1)filename = os.path.join(r'd:\temp', 'GIF1.GIF')file_stats = os.stat(filename)printf('%s size:%5.2fM'%(filename, file_stats.st_size / (1000*1000.0)))if file_stats.st_size > 5000000:printf('ERROR!\a\a')else: tspexecutepythoncmd('cdpg %d'%(width))exit()#--------------------------------------------------------gifid = []dirname = ''flag = 0unoptimizeflag = 0imagewidth = 0if len(sys.argv) <= 1:gifid = tspgetgifid()if len(gifid) == 0:printf('ERROR: No select any GIF !\a')exit()filename = tspgetdopfile(gifid[-1])dirname = os.path.dirname(filename)imagesize = tspgetimagesize(gifid[-1])imagewidth = imagesize[0]elif sys.argv[1][0] == '+':dirname = r'd:\temp\gif'sys.argv[1] = sys.argv[1][1:]elif sys.argv[1][0] == '*':sys.argv[1] = sys.argv[1][1:]dirname = clipboard.paste()flag = 2unoptimizeflag = 1if len(sys.argv[1]) > 0:resizeflag = 1else:gifid = tspgetgifid()if len(gifid) == 0:printf('ERROR: No select any GIF !\a')exit()filename = tspgetdopfile(gifid[-1])dirname = os.path.dirname(filename)imagesize = tspgetimagesize(gifid[-1])imagewidth = imagesize[0]printf(imagewidth)if not os.path.isdir(dirname):printf("ERROR: dirname error.")exit()else: printf(dirname)#--------------------------------------------------------if gifgearflag != 0 and argn == 1: flag = 1elif gifgearflag != 0 and argn >= 2 and len(sys.argv[1]) > 0:if sys.argv[1][0] == '|':flag = sys.argv[1].count('|') + 1sys.argv[1] = sys.argv[1].replace('|', '')elif sys.argv[1][0] == ':':flag = sys.argv[1].count(':') + 1sys.argv[1] = sys.argv[1].replace(':', '')doubleopt = 1elif sys.argv[1][0] == ':':flag = sys.argv[1].count(':') + 1sys.argv[1] = sys.argv[1].replace(':', '')doubleopt = 1elif sys.argv[1][:2] == '<>':flag = 2sys.argv[1] = sys.argv[1][2:]size5Mflag = 1elif sys.argv[1][:2] == '><':flag = 3sys.argv[1] = sys.argv[1][2:]size5Mflag = 1elif sys.argv[1][0] == '>':flag = sys.argv[1].count('>') + 1sys.argv[1] = sys.argv[1].replace('>', '')resizeflag = 1elif sys.argv[1][0] == '<':flag = sys.argv[1].count('<') + 1sys.argv[1] = sys.argv[1].replace('<', '')resizeflag = 1doubleopt = 1elif gifgearflag != 0 and argn >= 3:if sys.argv[1][0] == '|':flag = sys.argv[1].count('|') + 1sys.argv[1] = sys.argv[1].replace('|', '')elif sys.argv[1][0] == ':':flag = sys.argv[1].count(':') + 1sys.argv[1] = sys.argv[1].replace(':', '')doubleopt = 1elif sys.argv[1][0] == ':':flag = sys.argv[1].count(':') + 1sys.argv[1] = sys.argv[1].replace(':', '')doubleopt = 1elif sys.argv[1][:2] == '<>':flag = 2sys.argv[1] = sys.argv[1][2:]size5Mflag = 1elif sys.argv[1][:2] == '><':flag = 3sys.argv[1] = sys.argv[1][2:]size5Mflag = 1elif sys.argv[1][0] == '>':flag = sys.argv[1].count('>') + 1sys.argv[1] = sys.argv[1].replace('>', '')resizeflag = 1elif sys.argv[1][0] == '<':flag = sys.argv[1].count('<') + 1sys.argv[1] = sys.argv[1].replace('<', '')resizeflag = 1doubleopt= 1headstr = ''#--------------------------------------------------------if flag != 0:tspsendwindowkey(gifgear, "fr", alt=1, noreturn=1)time.sleep(.5)tspsendwindowkey(gifgear, "n", alt=1, noreturn=1)tspsendwindowkey(gifgear, "fi", alt=1, noreturn=1)time.sleep(1)rect = tspgetwindowrect('位置不可用')if sum(rect) != 0:tspsendwindowkey("位置不可用", '\r')time.sleep(.5)tspsendwindowkey("位置不可用", '\r')time.sleep(.5)clipboard.copy(dirname)tspsendwindowkey(dialog, "n", alt=1, noreturn=1)time.sleep(.25        )tspsendwindowkey(dialog, "v", control=1, noreturn=1)tspsendwindowkey(dialog, "\r", noreturn=1)time.sleep(1)rect = tspgetwindowrect(dialog)pyautogui.click((rect[0]+rect[2])//2, (rect[1]+rect[3])//2)tspsendwindowkey(dialog, "ac", control=1, noreturn=1)time.sleep(.25)tspsendwindowkey(dialog, "o", alt=1, noreturn=1)printf('\a')#----------------------------------------------------if flag >= 2:for _ in range(2):time.sleep(0.5)printf('\a')#------------------------------------------------if resizeflag:ss = sys.argv[1]sizenum = 640if ss.isdigit():sizenum = int(ss)printff(ss, sizenum)for _ in range(100):tspsendwindowkey(gifgear, "az", alt=1, noreturn=1)time.sleep(.5)rect = tspgetwindowrect('Resize Animation')if sum(rect) != 0: breaktspbeep(1200, 20)if tspread()[2] != 0: exit()rect = tspgetwindowrect('Resize Animation')if sum(rect) == 0: exit()clipboard.copy('%d'%sizenum)tspsendwindowkey('Resize Animation', 'v', control=1, noreturn=1)tspsendwindowkey('Resize Animation', '\r', noreturn=1)time.sleep(.5)#------------------------------------------------for _ in range(100):tspsendwindowkey(gifgear, "at", alt=1, noreturn=1)time.sleep(.5)rect = tspgetwindowrect('Optimize Animation')if sum(rect) != 0: breaktspbeep(1200, 20)if tspread()[2] != 0: exit()rect = tspgetwindowrect('Optimize Animation')if sum(rect) == 0: exit()for _ in range(100):time.sleep(.5)tspsendwindowkey('Optimize Animation', '\r', noreturn=1)tspbeep(1200, 20)rect = tspgetwindowrect('Optimize Animation')if sum(rect) == 0:breakif tspread()[2] != 0: exit()rect = tspgetwindowrect('Optimize Animation')if sum(rect) != 0: exit()#------------------------------------------------if doubleopt != 0:tspsendwindowkey(gifgear, "au", alt=1, noreturn=1)time.sleep(.5)for _ in range(100):tspsendwindowkey(gifgear, "at", alt=1, noreturn=1)time.sleep(.5)rect = tspgetwindowrect('Optimize Animation')if sum(rect) != 0: breaktspbeep(1200, 20)if tspread()[2] != 0: exit()rect = tspgetwindowrect('Optimize Animation')if sum(rect) == 0: exit()for _ in range(100):time.sleep(.5)tspsendwindowkey('Optimize Animation', '\r', noreturn=1)tspbeep(1200, 20)rect = tspgetwindowrect('Optimize Animation')if sum(rect) == 0:breakif tspread()[2] != 0: exit()rect = tspgetwindowrect('Optimize Animation')if sum(rect) != 0: exit()#------------------------------------------------if unoptimizeflag > 0:tspsendwindowkey(gifgear, "au", alt=1, noreturn=1)time.sleep(1)for _ in range(100):tspsendwindowkey(gifgear, "at", alt=1, noreturn=1)time.sleep(.5)rect = tspgetwindowrect('Optimize Animation')if sum(rect) != 0: breaktspbeep(1200, 20)if tspread()[2] != 0: exit()rect = tspgetwindowrect('Optimize Animation')if sum(rect) == 0: exit()for _ in range(100):time.sleep(.5)tspsendwindowkey('Optimize Animation', '\r', noreturn=1)tspbeep(1200, 20)rect = tspgetwindowrect('Optimize Animation')if sum(rect) == 0:breakif tspread()[2] != 0: exit()rect = tspgetwindowrect('Optimize Animation')if sum(rect) != 0: exit()tspsendwindowkey(gear_title, "s", control=1, shift=1, noreturn=1)time.sleep(0.25)clipboard.copy('GIF1.gif')tspsendwindowkey('Save As', 'v', control=1, noreturn=1)tspsendwindowkey('Save As', 's', alt=1, noreturn=1)tspsendwindowkey('Save As', 'y', alt=1, noreturn=1)clipboard.copy(r'd:\temp\GIF1.GIF')filename = os.path.join(r'd:\temp', 'GIF1.GIF')time.sleep(1)lastsize = -1for _ in range(100):file_stats = os.stat(filename)if file_stats.st_size == lastsize: breaklastsize = file_stats.st_sizetime.sleep(1)tspbeep(2000, 10)printf('%s size:%5.2fM'%(filename, file_stats.st_size / (1000*1000.0)))#------------------------------------------------if size5Mflag > 0:while file_stats.st_size / (1000*1000.0) > gif5Msize:if imagewidth == 0: imagewidth = 560else:ratio = sqrt(file_stats.st_size / (1000*1000.0) / gif5Msize)if ratio < 1.5: ratio *= 1.15imagewidth = imagewidth / ratiofor _ in range(10):tspsendwindowkey(gifgear, "au", alt=1, noreturn=1)time.sleep(.2)for _ in range(100):tspsendwindowkey(gifgear, "az", alt=1, noreturn=1)time.sleep(.5)rect = tspgetwindowrect('Resize Animation')if sum(rect) != 0: breaktspbeep(1200, 20)if tspread()[2] != 0: exit()printf("Set width:%d"%imagewidth)clipboard.copy('%d'%imagewidth)tspsendwindowkey('Resize Animation', 'v', control=1, noreturn=1)tspsendwindowkey('Resize Animation', '\r', noreturn=1)time.sleep(.5)for _ in range(100):tspsendwindowkey(gifgear, "at", alt=1, noreturn=1)time.sleep(.5)rect = tspgetwindowrect('Optimize Animation')if sum(rect) != 0: breaktspbeep(1200, 20)if tspread()[2] != 0: exit()rect = tspgetwindowrect('Optimize Animation')if sum(rect) == 0: exit()for _ in range(100):time.sleep(.5)tspsendwindowkey('Optimize Animation', '\r', noreturn=1)tspbeep(1200, 20)rect = tspgetwindowrect('Optimize Animation')if sum(rect) == 0:breakif tspread()[2] != 0: exit()rect = tspgetwindowrect('Optimize Animation')if sum(rect) != 0: exit()tspsendwindowkey(gear_title, "s", control=1, shift=1, noreturn=1)time.sleep(0.25)clipboard.copy('GIF1.gif')tspsendwindowkey('Save As', 'v', control=1, noreturn=1)tspsendwindowkey('Save As', 's', alt=1, noreturn=1)tspsendwindowkey('Save As', 'y', alt=1, noreturn=1)filename = os.path.join(r'd:\temp', 'GIF1.GIF')time.sleep(1)lastsize = -1for _ in range(100):file_stats = os.stat(filename)if file_stats.st_size == lastsize: breaklastsize = file_stats.st_sizetime.sleep(.5)tspbeep(2000, 10)file_stats = os.stat(filename)printf('%s size:%5.2fM'%(filename, file_stats.st_size / (1000*1000.0)))#------------------------------------------------if flag >= 3:time.sleep(.1)width = 560if resizeflag == 0:ss = sys.argv[1]if ss.isdigit():width = int(ss)if len(sys.argv) > 2:headstr = ' '.join(sys.argv[2:])else:headstr = ' '.join(sys.argv[1:])else:if len(sys.argv) > 2:if sys.argv[2].isdigit():width = int(sys.argv[2])if len(sys.argv) > 3:headstr = ' '.join(sys.argv[3:])else:headstr = ' '.join(sys.argv[2:])if file_stats.st_size > 5000000:printf('ERROR!\a\a')else: tspexecutepythoncmd('cdpg %s %d'%(headstr, width))exit()#--------------------------------------------------------filename = r'd:\temp\gif1.gif'csdnflag = 0if len(gifid) == 0:printf("GIFID error.")exit()#--------------------------------------------------------if argn > 1:if sys.argv[1][0:2] == '||':width = ''if len(sys.argv[1]) > 2:width = sys.argv[1][2:]headstr = ' '.join(sys.argv[2:])dop2gif(r'd:\temp\gif1.gif', gifid=gifid[-1])filesize = (os.stat(filename).st_size / (1000*1000))printf('%s size:%5.2fM'%(filename, filesize))if filesize > 5:printf('ERROR!\a\a')else:tspexecutepythoncmd('cdpg %s %s'%(headstr, width))exit()#--------------------------------------------------------if argn <= 1:dop2gif(r'd:\temp\gif1.gif', gifid=gifid[-1])elif argn <= 2:if sys.argv[1] == '#':dop2gif(r'd:\temp\gif1.gif', gifid=gifid[-1])tspexecutepythoncmd('cdpg gif1')elif sys.argv[1] == '&':dop2gif(r'd:\temp\gif1.gif', gifid=gifid[-1])else:dop2gif(r'd:\temp\%s.gif'%sys.argv[1], gifid=gifid[-1])filename = r'd:\temp\%s.gif'%sys.argv[1]elif argn <= 3:dop2gif(r'd:\temp\%s.gif'%sys.argv[1], gifid=gifid[-1], period=int(sys.argv[2]), last=int(sys.argv[2]))filename = r'd:\temp\%s.gif'%sys.argv[1]elif argn <= 4:dop2gif(r'd:\temp\%s.gif'%sys.argv[1], gifid=gifid[-1], period=int(sys.argv[2]), last=int(sys.argv[3]))filename = r'd:\temp\%s.gif'%sys.argv[1]file_stats = os.stat(filename)printf('%s size:%5.2fM'%(filename, file_stats.st_size / (1000*1000.0)))printf('\a')#------------------------------------------------------------
#        END OF FILE : D2GIF.PY
#============================================================
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# CDPG.PY                     -- by Dr. ZhuoQing 2021-06-15
#
# Note:
#============================================================from head import *
import pyautoguicsdn_title = '写文章-CSDN博客'
open_title = "打开"
gear_title = 'GIF Movie Gear'#------------------------------------------------------------
picfile = r'd:\temp\gif1.gif'
widthstr = '560'
deleteflag = 0#------------------------------------------------------------
if len(sys.argv) > 1:flag = 0if sys.argv[-1].isdigit():if int(sys.argv[-1]) > 50:widthstr = ' '.join(sys.argv[1:])       #int(sys.argv[-1])flag = 1if int(sys.argv[-1]) == 0:widthstr = ' '.join(sys.argv[1:])       #int(sys.argv[-1])flag = 1if sys.argv[1][-1] == '.':flag = 1widthstr = ' '.join(sys.argv[1:])if flag == 0:picfile = sys.argv[1]if not os.path.isfile(picfile):picfile = os.path.join(r'd:\temp', picfile)if not os.path.isfile(picfile):picfile = picfile + '.GIF'printf(picfile)
else:windowtitle = tspgetwindowtitle()for f in windowtitle:if f.find('GIF Movie Gear') >= 0:filename = f.split('-')[0].rstrip(' ')if filename.find('Untitled') == 0:tspsendwindowkey(gear_title, "s", control=1, shift=1, noreturn=1)time.sleep(0.5)clipboard.copy('GIF1.gif')tspsendwindowkey('Save As', 'v', control=1, noreturn=1)tspsendwindowkey('Save As', 's', alt=1, noreturn=1)tspsendwindowkey('Save As', 'y', alt=1, noreturn=1)filename = 'GIF1.GIF'time.sleep(.5)deleteflag = 1picfile = os.path.join(r'd:\temp', filename)break#------------------------------------------------------------
if not os.path.isfile(picfile):picfile = picfile + '.GIF'if not os.path.isfile(picfile):printf("%s is not file!\a"%picfile)exit()#------------------------------------------------------------
rect = tspgetwindowrect(csdn_title)
tspsendwindowkey(csdn_title, 'g', control=1, shift=1, noreturn=1)
time.sleep(.5)
pyautogui.click((rect[0]+rect[2])//2, (rect[1]+rect[3])//2)
pyautogui.click((rect[0]+rect[2])//2, (rect[1]+rect[3])//2 - 10)
pyautogui.click((rect[0]+rect[2])//2, (rect[1]+rect[3])//2 + 5)for _ in range(100):time.sleep(.5)rect = tspgetwindowrect(open_title)if sum(rect) != 0:breakif tspread()[2] != 0: exit()printf('\a')tspsendwindowkey(open_title, "n", alt=1, noreturn=1)
clipboard.copy(picfile)
tspsendwindowkey(open_title, "v", control=1, noreturn=1)
tspsendwindowkey(open_title, "o", alt=1, noreturn=1)tspexecutepythoncmd('cdpp #%s'%widthstr)if deleteflag > 0:time.sleep(0.5)os.remove(picfile)#------------------------------------------------------------
#        END OF FILE : CDPG.PY
#============================================================

利用Python模拟鼠标操作,一键将GIF文件载入CSDN的Markdown编辑器相关推荐

  1. 利用Python模拟鼠标自动完成MM32-LINK程序下载

    简 介: 编写了利用Python控制MM32-LINK自动下载程序,这可以减少在开发过程中的操作. MM32-LINK在打开程序过程中,对话框的标题出现错误,"Load form file& ...

  2. python 鼠标 自动点击_利用python模拟鼠标点击自动完成工作,提升你的工作效率!...

    没有什么能比学以致用让学习变得更有动力的了. 不知道大家在工作中有没有一些工作需要重复的点击鼠标,因为会影响到财务统计报表的关系,我们每个月底月初都要修改ERP中的单据日期,单据多的时候光修改就能让你 ...

  3. python模拟鼠标点击和键盘输入的操作_python模拟鼠标点击和键盘输入的操作

    所有代码都是网上百度出来的,通过个人实践找到适合自己的. 采用的python 库是 pymouse.pykeyboard 安装时直接pip安装的,pip install PyUserInput 安装不 ...

  4. 使用python pynput完全模拟鼠标操作

    人生苦短,我用Python! 总是有些事情需要重复性机械性的操作,想要设计代码去做,有些程序又不给接口,这时最简单的方法就是,模拟鼠标操作! 除了不能生孩子,其他都能做的python!  一搜 果然有 ...

  5. Delphi下利用WinIo模拟鼠标键盘详解

    本文最早在编程论坛上发表,文章地址:http://programbbs.com/bbs/view12-17207-1.htm,相关文件可以在上述地址的页面中下载.转载时请注明出处. 前言 一日发现Se ...

  6. 利用python从网页查找数据_利用Python模拟淘宝的搜索过程并对数据进行可视化分析...

    数据挖掘入门与实战 公众号: datadw 本文讲述如何利用Python模拟淘宝的搜索过程并对搜索结果进行初步的数据可视化分析. 搜索过程的模拟:淘宝的搜索页面有两种形式, 一种形式是, 2019/2 ...

  7. python模拟鼠标键盘点击,简单自动化动物餐厅

    Python模拟鼠标键盘点击自动化 首先在玩动物餐厅的时候发现他需要连续点击才能完成任务,而这有是一项枯燥而复杂的任务,所以我就想到用python的鼠标模拟来自动完成 Python中模拟键盘和鼠标最著 ...

  8. 【向重复工作说不】c#之模拟鼠标操作

    一.写在前面 作为一个人力资源工作者,会经常遇到填表.报表的事务,其实有时候就是重复再重复的点击鼠标工作,特别是遇到一些复杂的客户端程序.网页程序,诸如用友客户端.社保管理系统等等,就尤其让人头疼.正 ...

  9. Delphi下利用SendInput模拟鼠标键盘

    前言 发了一篇<Delphi下利用WinIo模拟鼠标键盘详解>(http://programbbs.com/bbs/view12-17207-1.htm),再发一个利用SendInput模 ...

最新文章

  1. kettle分批处理大表数据_kettle-批量同步表数据
  2. 企业网络推广之下滴滴造车野心不减,“造车时代”想入局恐需技术先行
  3. QML for Android通过ScreenRecorder录制屏幕并保存为本地视频
  4. Hive的两种操作模式
  5. 音视频技术开发周刊 | 230
  6. jsf表单验证_JSF:在正确的阶段进行验证(了解生命周期)
  7. HTML5 本地存储(Web Storage)
  8. Linux 命令(58)—— readelf 命令
  9. 图片播放器 简单使用
  10. 华为鸿蒙os系统测试,华为鸿蒙OS系统测试结果相继出炉!果然没让花粉们久等:最好的体验...
  11. rollup打包js的注意点-haorooms博客分享
  12. paip.c#.net 右键菜单带图标
  13. 基于SpringBoot进销存ERP管理系统,源代码分享
  14. java-net-php-python-java《Linux基础及技术》课程网站演示录像修改计算机毕业设计程序
  15. 内网KMS服务器搭建分享
  16. 鸿蒙2.0正式开源,华为重磅押注开发者生态
  17. gfs和hdfs文件系统的区别
  18. 好的中层管理者要兼顾公司和员工的利益
  19. 计算机网络实验三——IP网络规划与路由设计
  20. 为什么大家都不喜欢用国产科研仪器?

热门文章

  1. javascript中的字典
  2. redis数据结构之一:链表
  3. docker删除image失败,conflict
  4. 识别、触达、转化、评估!百度云用ABC四招颠覆营销不可能
  5. Sublime注释插件--DocBlockr
  6. js实现图片不能显示时使用替换图片显示
  7. ASP.NET页面进行GZIP压缩优化的几款压缩模块的使用简介及应用测试!(附源码)
  8. 关于案例教学大家都有些什么看法呢?
  9. VC++ .NET 2003学习
  10. 计算机电缆的屏蔽,DJYVP计算机电缆(总屏蔽)和DJYPVP计算机电缆(分屏蔽加总屏蔽)区别...