iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python基于pywinauto实现的自动化采集任务
  • 207
分享到

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

Pythonpywinautopywinauto自动化采集 2023-05-15 17:05:45 207人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录基于 pywinauto 的自动化采集任务实现技术代码总结基于 pywinauto 的自动化采集任务 实现技术代码总结 这是一篇学习总结, 前段时间写了一个基于 python 的

基于 pywinauto 的自动化采集任务

实现技术代码总结 这是一篇学习总结, 前段时间写了一个基于 python 的自动获取网易有道单词例句的程序, 效果感觉还不错. 但是最终我也没有使用它, 主要原因有以下三点:

  1. 获取速度太慢, 我想要获取的单词比较多.
  2. 网易也会对这种行为进行封禁的, 采集会中断.
  3. 这些例句是有属于网易的.

实现技术

这个程序使用了一个 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<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 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++, 我这里就偷懒了, 直接怎么省事怎么来了.

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

控制台输出

在这里插入图片描述

output.json 文件

在这里插入图片描述

总结

这个虽然没有什么用处, 不过也了解了不少新的东西. 在这个过程中学习了正则表达式, 并且也运用上了. 如果你关注我的其它博客的话, 会发现我最近一直在更新正则表达式相关的文章. 这个就是一个小玩具, 不过如果真的要启动的话, 我感觉还蛮麻烦的, 如果感兴趣的话, 不妨试一试. 如果有问题的话, 可以在下面评论. 不过不一定可以及时回复了.

到此这篇关于Python基于pywinauto实现的自动化采集任务的文章就介绍到这了,更多相关pywinauto实现自动化采集内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python基于pywinauto实现的自动化采集任务

本文链接: https://www.lsjlt.com/news/209369.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • Python基于pywinauto实现的自动化采集任务
    目录基于 pywinauto 的自动化采集任务实现技术代码总结基于 pywinauto 的自动化采集任务 实现技术代码总结 这是一篇学习总结, 前段时间写了一个基于 Python 的...
    99+
    2023-05-15
    Python pywinauto pywinauto 自动化采集
  • Python基于pywinauto怎么实现自动化采集任务
    本文小编为大家详细介绍“Python基于pywinauto怎么实现自动化采集任务”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python基于pywinauto怎么实现自动化采集任务”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一...
    99+
    2023-07-06
  • python+pywinauto+lackey实现PC端exe自动化的示例代码
    欢迎阅读 最近一年多一直在从事PC端exe的测试,也是趁着闲余时间,调研了下exe的自动化。 核心框架为python+pywinauto+lackey这样的一个组合方式 本文以大家...
    99+
    2024-04-02
  • 基于Python实现自动化生成数据报表
    目录前言开发工具环境搭建主要代码前言 不要在用手敲生成Excel数据报表了,用Python自动生成Excel数据报表!废话不多说 让我们愉快地开始吧~ 开发工具 Python版本: ...
    99+
    2024-04-02
  • 基于python实现自动化办公学习笔记
    1、CSV (1)写csv文件 import csv def writecsv(path,data): with open(path, "w") as f: writer = csv.writer(f)...
    99+
    2023-01-31
    学习笔记 python
  • 基于Python实现自动化文档整理工具
    目录引子应用场景源代码源代码说明效果如下所示引子 例如,一个人可能会在计算机上存储大量的照片、视频和文档文件,这些文件可能散落在不同的文件夹中,难以管理和查找。该程序可以根据文件类型...
    99+
    2023-05-18
    Python实现自动化文档整理 Python自动化文档整理 Python文档整理
  • 用于基本社区管理任务自动化的Python脚本有哪些
    这篇文章主要讲解了“用于基本社区管理任务自动化的Python脚本有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“用于基本社区管理任务自动化的Python脚本有哪些”吧!tshirts.p...
    99+
    2023-06-15
  • 基于Python实现自动扫雷详解
    目录准备实现思路窗体截取雷块分割雷块识别扫雷算法实现用Python+OpenCV实现了自动扫雷,突破世界记录,我们先来看一下效果吧。 中级 - 0.74秒 3BV/S=60.81 ...
    99+
    2024-04-02
  • 基于Python怎么实现自动化文档整理工具
    应用场景个人文件整理:个人在计算机上存储了大量的照片、视频和文档文件,这些文件可能分散在不同的文件夹中,使用该程序可以将这些文件整理到不同的文件夹中,并按照文件类型分类,方便管理和查找。批量文件处理:需要批量处理某个文件夹中的所有文件,如将...
    99+
    2023-05-14
    Python
  • 基于Python实现报表自动化并发送到邮箱
    目录项目背景一、报表自动化目的二、报表自动化范围三、实现步骤第一步:读取数据源文件第二步:DataFrame计算第三步:自动发送邮件项目背景 作为数据分析师,我们需要经常制作统计分析...
    99+
    2024-04-02
  • 基于Python实现自动关机小工具
    上班族经常会遇到这样情况,着急下班结果将关机误点成重启,或者临近下班又通知开会,开完会已经迟了还要去给电脑关机。 今天使用PyQt5做了个自动关机的小工具,设置好关机时间然后直接提交...
    99+
    2024-04-02
  • 基于Python实现自动抠图小程序
    目录导语正文1.前期准备1.1 首先1.2 网站小介绍2.正式抠图2.1 环境安装2.2 素材(可自选)2.3 主程序代码3.效果图3.1 界面展示​3.2 图片展示总结导语 大家好...
    99+
    2024-04-02
  • 浅谈Python任务自动化工具Tox基本用法
    目录浅谈Python任务自动化工具Tox引言:简介:基本用法:配置文件:tox 的工作流程:安装:使用:小结:浅谈Python任务自动化工具Tox 引言: 最近在搜集github上包...
    99+
    2024-04-02
  • 基于Selenium+Python的web自动化测试框架
    一、什么是Selenium?Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分:Selenium IDE、Selenium WebDriver 和Se...
    99+
    2023-06-04
  • 基于Python实现微信自动回复功能
    大家好,之前我们使用 WechatPCAPI 做了获取微信好友信息以及查看撤回消息,本文我们再使用 WechatPCAPI 来实现微信自动回复的功能。 实现自动回复的功能,我们需要用...
    99+
    2024-04-02
  • 基于Python实现视频自动下载软件
    目录序言效果展示下载视频下载弹幕下载评论软件生成打包序言 哈喽兄弟们,今天来实现一个Python采集视频、弹幕、评论与一体的小软件。 平常咱们都是直接代码运行,不过今天我们做成软件,...
    99+
    2024-04-02
  • Go语言kylin任务自动化怎么实现
    本文小编为大家详细介绍“Go语言kylin任务自动化怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Go语言kylin任务自动化怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。前言kylin是一个开...
    99+
    2023-07-02
  • MySQL中怎么实现循环自动化任务
    在MySQL中,可以通过使用事件调度器(Event Scheduler)来实现循环自动化任务。事件调度器是MySQL中用于执行预定任...
    99+
    2024-04-30
    MySQL
  • 基于Docker、Nginx和Jenkins实现前端自动化部署
    目录前期准备部署目标Dcoker环境的搭建连接云服务器安装Docker环境Docker安装Docker ComposeDocker安装Nginx和Jenkins服务安装Nginx和J...
    99+
    2024-04-02
  • 基于Python的shell自动化框架ShutIt怎么用
    今天就跟大家聊聊有关基于Python的shell自动化框架ShutIt怎么用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。ShutIt是一个易于使用的基于shell的自动化框架。它对...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作