当前位置:

首页 > 编程开发 > Python基于pywinauto怎么实现自动化采集任务

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

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

本文目录

    基于 pywinauto 的自动化采集任务

    实现技术

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

    代码

    requirements.txt

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

    代码

    import os
    import random
    import time
    import re
    from typing import Dict, List
    from pywinauto.application import Application
    from pywinauto import mouse
    from pywinauto import keyboard
    import pyperclip
    import 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 = []
    # 有道词典的进程id
    processId = 13840
    
    
    def 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 content
    
    
    def to_list(line: str) -> List[Dict[str, str]]:
        """
        直接生成列表字典对象
        [{
            "no": 1,
            "original": "",
            "translate"
        }]
        """
        sentences = []
        # 正则表达式
        REGEXP = r'(?P\d+?)\.\n(?P.+?)\n(?P.+?)\n'
        # 编译
        pattern = re.compile(REGEXP)
        # 匹配
        rs = pattern.finditer(line)
        # 组装结果
        for r in rs:
            print(r.groupdict())
            sentences.append(r.groupdict())
        return sentences
    
    
    if __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怎么实现自动化采集任务

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 Python
    相关文章 更多
    python删除一个列表里的重复元素的方法与代码示例
    python删除一个列表里的重复元素的方法与代码示例

    学习如何使用Python高效删除列表中的重复元素。本文提供5种常见方法的代码示例,涵盖保持顺序与不保持顺序的场景,适合初学者和进阶开发者参考。

    Python写接口的步骤及完整代码示例
    Python写接口的步骤及完整代码示例

    详细讲解使用Python编写Web接口的核心步骤与完整代码示例,涵盖环境准备、路由定义、数据校验、服务启动及调试测试方法。

    codex怎么读取word文档及docx文件操作教程
    codex怎么读取word文档及docx文件操作教程

    介绍如何利用编程工具读取和解析Word文档(docx格式),涵盖基础文本提取代码示例、结构化数据处理逻辑,以及处理复杂排版时的技术局限与替代方案。

    怎么在Python中调用C语言代码提升性能
    怎么在Python中调用C语言代码提升性能

    详细讲解在Python中调用C语言代码提升性能的完整实践指南,包含原理分析、编译步骤、ctypes与CFFI具体实现、性能对比及常见陷阱。

    Python与C语言的性能差异及底层原理
    Python与C语言的性能差异及底层原理

    深入解析Python与C语言在执行效率上的数量级差异,从编译机制、变量内存布局、动态类型推断到GIL锁,系统阐明底层核心原理。

    Python和C语言哪个更适合编程入门
    Python和C语言哪个更适合编程入门

    客观对比Python与C语言在心智负担、底层机制与学习反馈上的核心差异,提供清晰有据的选择标准与切实的入门学习路径。

    selenium上传文件教程本地文件路径设置方法
    selenium上传文件教程本地文件路径设置方法

    深入解析Selenium处理文件上传的技术细节,涵盖标准HTML控件的路径直接注入法与非标准控件的系统级模拟方案,提供Windows与Linux环境下的路径设置最佳实践及常见异常排查。

    大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景
    大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景

    针对大数据工程场景,系统对比Java、Scala与Python在执行性能、生态结合、开发效率和维护成本上的核心差异,给出清晰的架构选型依据与落地方案。

    langgraph python guide中文入门教程详解
    langgraph python guide中文入门教程详解

    本篇LangGraph Python中文入门教程详解,系统梳理StateGraph状态机定义、节点编写、边与条件路由、检查点持久化(MemorySaver)等核心机制,提供从环境安装到完整循环智能体构建的代码示例与实操指导。

    Windows 安装 Python:从官方入口到虚拟环境的可复现实践
    Windows 安装 Python:从官方入口到虚拟环境的可复现实践

    面向后端开发者,基于 Python 官方文档说明如何在 Windows 上安装 Python、创建 venv 虚拟环境及使用 pip 管理依赖。包含可复制命令、验证方法及工具选择边界,避免常见配置误区。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。