我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python基于pywinauto怎么实现自动化采集任务

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python基于pywinauto怎么实现自动化采集任务

本文小编为大家详细介绍“Python基于pywinauto怎么实现自动化采集任务”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python基于pywinauto怎么实现自动化采集任务”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

基于 pywinauto 的自动化采集任务

实现技术

这个程序使用了一个 Python 的自动化库 ---- pywinauto, 因为官方已经很久没更新了, 所以 python 的版本最高只能是 Python 3.7 左右, 我用的是 Python 3.7.1. 我使用它模拟了输入单词, 复制例句, 获取例句, 清空剪切板, 然后重复这个操作, 总体上实现比较简陋. 而且, 为了简单, 我是之间手动切换到例句页, 这样就不用使用程序来切换到例句页了.

代码

requirements.txt

pyperclip==1.8.2pywin32==304pywinauto==0.6.8

代码

import osimport randomimport timeimport refrom typing import Dict, Listfrom pywinauto.application import Applicationfrom pywinauto import mousefrom pywinauto import keyboardimport pyperclipimport json# 程序处理中的各种路径dir_path = r"C:/Users/Dick/Desktop/work/DragonEnglish/tools"input_path = os.path.join(dir_path, r"input.txt")output_path = os.path.join(dir_path, r"output.json")error_path = os.path.join(dir_path, r"error.txt")# 顺序错误的单词error_words = []# 有道词典的进程idprocessId = 13840def line_process(content: str) -> str:    """    去除所有空行, 再去除前面四行无关内容    """    lines = content.split("\r\n")    # 因为例句开头是 数字. 开头的, 所以先以这个为特点来进行过滤掉多复制的开头    count = 0    for i in range(len(lines)):        if re.match(r"\d+\.", lines[i]):            count = i            break    lines = lines[count:]    filter_lines = []    for line in lines:        if line.strip() != "":  # 过滤空行            if not line.startswith("youdao") and not \                    (line.startswith("《") and line.endswith("》")):  # 过滤来源                filter_lines.append(line)    if len(filter_lines) % 3 != 0:        raise Exception("抓取数据错误")    content = "\n".join(filter_lines) + "\n"  # 补上一个 \n, 不然正则会漏掉一个结果    return contentdef to_list(line: str) -> List[Dict[str, str]]:    """    直接生成列表字典对象    [{        "no": 1,        "original": "",        "translate"    }]    """    sentences = []    # 正则表达式    REGEXP = r'(?P<no>\d+?)\.\n(?P<original>.+?)\n(?P<translate>.+?)\n'    # 编译    pattern = re.compile(REGEXP)    # 匹配    rs = pattern.finditer(line)    # 组装结果    for r in rs:        print(r.groupdict())        sentences.append(r.groupdict())    return sentencesif __name__ == "__main__":    # 连接网易有道词典    app = Application(backend="uia").connect(process=processId)    # 获取需要的窗口    win = app.window(class_name="RICHEDIT50W")    # 输入词汇列表    input_words = []    # 输出词汇对象列表    output_words = []    # 打开输入文件,初始化输入词汇列表    with open(input_path, "r", encoding="utf-8") as input_file:        input_words = input_file.read().split("\n")    for word in input_words:        print("正在抓取单词: %s" % word)        # 清空剪切板,这步很重要,防止重复复制        pyperclip.copy("")        # 将输入数据复制到剪切板        pyperclip.copy(word)        # 定位到输入框(采用坐标定位,定位到大致位置即可)        mouse.click(coords=(2400, 80))        # 模拟按键操作:全选 删除 粘贴 回车(触发查询)        keyboard.send_keys("^a{DELETE}^v{ENTER}")        # 清空剪切板,这步很重要,防止重复复制        pyperclip.copy("")        # 鼠标左键点击,这个操作只是为了把鼠标移动到这里        mouse.click(button="left", coords=(2200, 330))        # 模拟键盘 CTRL+A CTRL+C,直接全选所有的例句(这里会多选一部分内容,待会再处理)        keyboard.send_keys("^a^c")        # 暂停一会儿,不做操作的太快        time.sleep(random.random() * 2 + 1)        # pywinauto 复制的内容是在系统的剪切板里面的,所以需要其它库读取        content = pyperclip.paste()        # 对内容进行简单的预处理后,加入output_words        try:            lines = line_process(content)        except BaseException as exp:            print(exp)            # 如果抓取出现问题,说明被网易抓了现行,直接退出即可。            break        sentences = to_list(lines)        if not sentences:            print("获取例句为空, 可能是数据格式错误.")            break        output_words.append({            "word": word,            "example": sentences,        })        # 模拟暂停一个较长的随机时间,没有必要追求速度,平稳运行即可。        time.sleep(random.random() * 3 + 3)        # 清空剪切板,这步很重要,防止重复复制        pyperclip.copy("")    # 抓取完毕一个文件的内容后,然后一次性写入即可。    # 之前的写法是一个单词写入一次,会造成太多的IO次数,浪费性能!    with open(output_path, "a+", encoding="utf-8") as output_file:        output_file.write(json.dumps(            output_words, ensure_ascii=False, indent=4))        # 错误单词记录        with open(error_path, "w", encoding="utf-8") as err_file:            err_file.writelines("\n".join(error_words))

演示 如果想要启动这个代码, 还是蛮复杂的. 我这里直接把需要的步骤罗列一下, 希望能帮助感兴趣的同学.

  1. 修改dir_path, 并且在下面准备一个 input.txt 文件.

  2. 获取有道词典进程的 id.

  3. 获取单词输入框的坐标, 获取复制粘贴处的坐标.

  4. 将有道词典界面调整到例句处.

启动项目, 需要一个 input.txt 文件, 这里是我测试的文件.

sophisticated
centralization
phenomenon
internationalization
radioactive

我是通过任务管理器获取的进程 pid, 你也可以通过其它访问. 或者最简单的是使用 Inspect 和 Spy++, 我这里就偷懒了, 直接怎么省事怎么来了.

Python基于pywinauto怎么实现自动化采集任务

单词输入框的坐标, 复制粘贴处的坐标. 第一个坐标是为了定位输入框的, 然后程序会把单词复制进去, 并执行一下回车键, 然后内容被查询出来. 再将鼠标移动到第二个坐标处, 这里只是移动到下面的空白处就行了, 然后会执行一个全选 CTRL+A 操作. 这样一个单词的内容就全部获取到了.

Python基于pywinauto怎么实现自动化采集任务

将有道调整到这个位置, 首选查询一个单词, 选择例句, 然后保持这个界面不要动即可.

Python基于pywinauto怎么实现自动化采集任务

最后就是程序的执行了, 录制的 GIF 做了加速处理, 实际上执行的时候, 是特意加了延时的, 防止被过早的发现了.

Python基于pywinauto怎么实现自动化采集任务

控制台输出

Python基于pywinauto怎么实现自动化采集任务

output.json 文件

Python基于pywinauto怎么实现自动化采集任务

读到这里,这篇“Python基于pywinauto怎么实现自动化采集任务”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python基于pywinauto怎么实现自动化采集任务

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python基于pywinauto怎么实现自动化采集任务

本文小编为大家详细介绍“Python基于pywinauto怎么实现自动化采集任务”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python基于pywinauto怎么实现自动化采集任务”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一
2023-07-06

Python基于pywinauto实现的自动化采集任务

这篇文章主要介绍了Python基于pywinauto实现的自动化采集任务,模拟了输入单词,复制例句,获取例句,清空剪切板,然后重复这个操作,需要的朋友可以参考下
2023-05-15

Go语言kylin任务自动化怎么实现

本文小编为大家详细介绍“Go语言kylin任务自动化怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Go语言kylin任务自动化怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。前言kylin是一个开
2023-07-02

MySQL中怎么实现循环自动化任务

在MySQL中,可以通过使用事件调度器(Event Scheduler)来实现循环自动化任务。事件调度器是MySQL中用于执行预定任务的功能,可以在指定的时间间隔内重复执行任务。下面是一个简单的示例,演示如何使用事件调度器来实现循环自动化
MySQL中怎么实现循环自动化任务
2024-04-30

MySQL中自动化数据合并任务怎么实现

MySQL中实现数据合并任务的一种常见方式是通过编写存储过程来自动化这个过程。存储过程是一组预编译的SQL语句,可以在数据库中进行重复执行。以下是一个简单的示例,演示如何在MySQL中使用存储过程来合并两个表中的数据:首先,假设有两个表
MySQL中自动化数据合并任务怎么实现
2024-04-29

python apscheduler cron定时任务触发接口自动化巡检怎么实现

这篇“python apscheduler cron定时任务触发接口自动化巡检怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看
2023-07-05

怎么用Python实现服务部署自动化

这篇“怎么用Python实现服务部署自动化”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么用Python实现服务部署自动化
2023-07-06

.net core基于Hangfire+Mysql持久化怎么实现定时任务配置

本篇内容主要讲解“.net core基于Hangfire+Mysql持久化怎么实现定时任务配置”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“.net core基于Hangfire+Mysql持久
2023-06-20

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录