当前位置: 首页 > news >正文

py实现win自动化自动登陆qq

系列文章目录

py实现win自动化自动登陆qq


文章目录

  • 系列文章目录
  • 前言
  • 一、上代码?
  • 总结


前言

之前都是网页自动化感觉太容易了,就来尝尝win自动化,就先写了一个qq登陆的,这个是拿到className 然后进行点击等。


一、上代码?

示例:

import psutil
import time
import os
from pywinauto import Application
from pywinauto.findwindows import find_window
from pywinauto.timings import WaitUntil
from pywinauto import mouseclass QQAutomator:def __init__(self):self.app = Noneself.main_window = Noneself.qq_path = r'D:\itveteranISTool\itveteranExe\qq\QQ.exe'def kill_qq_process(self):"""终止QQ相关进程"""for proc in psutil.process_iter(['pid', 'name']):if proc.info['name'] and proc.info['name'].lower() in ('qq.exe', 'qqschat.exe'):try:proc.kill()time.sleep(1)print(f"已终止进程:{proc.info['name']}")except Exception as e:print(f"终止失败:{e}")def find_qq_window(self, timeout=30):"""定位QQ窗口并打印详细信息"""start_time = time.time()while time.time() - start_time < timeout:try:window = self.app.window(class_name="Chrome_WidgetWin_1",control_type="Pane",title_re=".*QQ.*")if window.exists():self._print_window_details(window)return windowexcept Exception as e:print(f"窗口定位尝试失败:{str(e)}")time.sleep(1)return Nonedef _print_window_details(self, window):"""打印窗口详细信息"""print("=" * 60)print(f"窗口句柄: {window.handle}")print(f"窗口标题: {window.window_text()}")print(f"类名: {window.class_name()}")print(f"坐标范围: {window.rectangle()}")print("控件层次结构:")self._print_control_tree(window, level=0)print("=" * 60)def _print_control_tree(self, control, level=0, max_depth=3):"""递归打印控件树结构"""if level > max_depth:returnprefix = "  " * level + "└─ "try:info = f"{prefix}[{control.friendly_class_name()}] {control.element_info.name}"print(info)for child in control.children():self._print_control_tree(child, level + 1, max_depth)except:passdef click_button(self, button_title, retry=3):"""优化后的点击方法"""for attempt in range(retry):try:# 更精准的定位方式btn = self.main_window.child_window(title=button_title,control_type="Button",found_index=0).wait('ready', timeout=5)if btn.is_visible() and btn.is_enabled():print(f"点击按钮 [{button_title}] (第{attempt+1}次尝试)")btn.click_input()return True# 新增调试信息print(f"按钮状态:visible={btn.is_visible()}, enabled={btn.is_enabled()}")except Exception as e:print(f"按钮定位失败: {str(e)}")time.sleep(2)return Falsedef run(self):"""修复后的主流程"""self.kill_qq_process()if not os.path.exists(self.qq_path):print("路径无效!")returntry:# 增加启动等待self.app = Application(backend='uia').start(self.qq_path)time.sleep(1)  # 等待主进程初始化# 增强窗口定位self.main_window = self.find_qq_window(timeout=40)if not self.main_window:print("窗口定位失败,尝试备用方案...")qq_procs = [p for p in psutil.process_iter() if 'qq' in p.name().lower()]if qq_procs:hwnd = find_window(process=qq_procs[0].pid)self.main_window = self.app.window(handle=hwnd)if not self.main_window:print("❌ 无法定位窗口,退出程序")return# 打印调试信息print("="*40)self.main_window.print_control_identifiers()print("="*40)# 保存控件树self.main_window.print_control_identifiers(filename='control_tree.txt')# 执行点击操作# if self.click_button("添加账号"):#     print("已触发添加账号操作")#     time.sleep(3)  # 等待弹窗if self.click_button("登录"):print("登录请求已发送")self._verify_login()except Exception as e:print(f"主流程异常: {str(e)}")import tracebacktraceback.print_exc()def _verify_login(self):"""修复后的登录验证"""try:print("正在验证登录状态...")WaitUntil(30, 2, lambda: any(p.info['name'] and p.info['name'].lower() in ('qq.exe', 'qqlite.exe')for p in psutil.process_iter(['name'])))print("✅ 检测到QQ主进程,登录成功!")# 附加验证:检测主窗口变化main_window = self.app.window(class_name="Chrome_WidgetWin_0")if main_window.exists():print("✅ 检测到QQ主界面窗口")except TimeoutError:print("❌ 登录验证超时,可能原因:")print("1. 账号密码错误")print("2. 需要处理验证码")print("3. 网络连接异常")current_procs = [p.name() for p in psutil.process_iter()]print(f"当前运行进程:{current_procs}")if __name__ == "__main__":automator = QQAutomator()automator.run()

总结

携知云~ 携手创造知识~ 科技是第一生产力,卷起来

相关文章:

py实现win自动化自动登陆qq

系列文章目录 py实现win自动化自动登陆qq 文章目录 系列文章目录前言一、上代码&#xff1f;总结 前言 之前都是网页自动化感觉太容易了&#xff0c;就来尝尝win自动化&#xff0c;就先写了一个qq登陆的&#xff0c;这个是拿到className 然后进行点击等。 一、上代码&#xf…...

Axure : 列表分页、 列表翻页

文章目录 引言I 列表分页操作说明II 列表翻页操作说明引言 列表分页实现思路:局部变量、 中继器设置每页项目数 I 列表分页 操作说明 在列表元件底部添加一个分页下拉控件,分别为10,20,30,40,50; 将列表转换为动态面板,将设置面板大小勾选取消 给分页大小下拉控件添加…...

大学之大:隆德大学2025.5.6

隆德大学&#xff1a;北欧学术明珠的八百年传承与创新 一.前身历史&#xff1a;从中世纪神学院到现代综合大学的蜕变 隆德大学的历史可追溯至1425年&#xff0c;由丹麦国王埃里克七世在瑞典南部城市隆德创立的“神学与教会法研究院”。这所中世纪学府最初以培养天主教神职人员…...

每日算法-250506

每日算法学习记录 - 250506 今天记录了三道算法题的解题过程和思路&#xff0c;分享给大家。 3192. 使二进制数组全部等于 1 的最少操作次数 II 题目 思路 贪心 解题过程 我们从左到右遍历数组。使用一个变量 ret 来记录已经执行的操作次数。 对于当前元素 nums[i]&#x…...

【免费试用】LattePanda Mu x86 计算模块套件,专为嵌入式开发、边缘计算与 AI 模型部署设计

本次活动为载板设计挑战&#xff0c;旨在激发创意与技术实践能力&#xff0c;鼓励电子工程师、创客、学生及开发者围绕指定LattePanda Mu进行功能丰富、应用多样的载板开发设计。参赛用户将有机会展示硬件设计能力&#xff0c;并通过作品解决实际问题或构建创新项目。本次挑战活…...

用于备份的git版本管理指令

一、先下载一个git服务器软件并安装&#xff0c;创建一个git服务器进行备份的版本管理。 下列指令用于git常用备份&#xff1a; 1、强制覆盖远程仓库&#xff1a; git push --force origin master 2、重新指向新仓库&#xff1a; git remote set-url origin http://192.168.1.2…...

STM32H743单片机实现ADC+DMA多通道检测

在stm32cubeMX上配置ADCDMA实现多通道检测功能 DMA配置 生成代码&#xff0c;HAL_ADC_Start_DMA开始DMA读取ADC值&#xff0c;HAL_ADC_Stop_DMA关闭DMA读取 void Start_ADC2_DMA(void) {/* 初始化后校准ADC */HAL_ADCEx_Calibration_Start(&hadc2, ADC_CALIB_OFFSET, ADC_…...

(提升)媒体投稿技能

1\前期策划与准备 精准定位目标受众&#xff0c;分析内容偏好与活跃媒体基于目标受众&#xff0c;确定发稿核心主题与内容方向 2\内容创作与素材 撰写稿件注重标题吸引力&#xff0c;确保内容逻辑清晰价值突出。素材整合准备高质量的配图、视频 3\内部审核与优化 对稿件内…...

2025年提交App到Appstore从审核被拒到通过的经历

今年3月份提交一个App到Appstore&#xff0c;感觉比以前要严格了很多&#xff0c;被拒了多次才通过。 如果周末提交审核会非常非常&#xff0c;所以最好选择周一之周四的中午提交。 第一次提交被拒&#xff0c;原因为 Guideline 2.1 - Performance - App Completeness Guidel…...

63.微服务保姆教程 (六) SkyWalking--分布式链路追踪系统/分布式的应用性能管理工具

SkyWalking—分布式链路追踪系统/分布式的应用性能管理工具(APM) 一、为什么要用SkyWalking 对于一个有很多个微服务组成的微服务架构系统,通常会遇到一些问题,比如: 如何串联整个调用链路,快速定位问题如何缕清各个微服务之间的依赖关系如何进行各个微服务接口的性能分…...

vue3 computed方法传参数

我们对computed的基础用法不陌生&#xff0c;比如前端项目中经常会遇到数据处理的情况&#xff0c;我们就会选择computed方法来实现。但大家在碰到某些特殊场景&#xff0c;比如在template模板中for循环遍历时想给自己的计算属性传参&#xff0c;这个该怎么实现呢&#xff0c;很…...

Linux中为某个进程临时指定tmp目录

起因&#xff1a; 在linux下编译k8s&#xff0c;由于编译的中间文件太多而系统的/tmp分区设置太小&#xff0c;导致编译失败&#xff0c;但自己不想或不能更改/tmp分区大小&#xff0c;所以只能通过其他方式解决。 现象&#xff1a; tmp分区大小&#xff1a; 解决方法&#x…...

Informer源码解析4——完整注意力机制解读

完整注意力机制 源码 class FullAttention(nn.Module):def __init__(self, mask_flagTrue, factor5, scaleNone, attention_dropout0.1, output_attentionFalse):"""实现完整的注意力机制&#xff0c;支持因果掩码和注意力权重输出。Args:mask_flag (bool): 是…...

第一节:Web3开发概述

一、什么是Web3&#xff1f; 如果把互联网比作一个「大超市」&#xff1a; Web1&#xff08;1990年代&#xff09;&#xff1a;你只能看货架上的商品&#xff08;比如新浪、搜狐这种只读网站&#xff09;。Web2&#xff08;现在&#xff09;&#xff1a;你不仅能看&#xff0…...

【愚公系列】《Manus极简入门》022-艺术创作顾问:“艺术灵感使者”

&#x1f31f;【技术大咖愚公搬代码&#xff1a;全栈专家的成长之路&#xff0c;你关注的宝藏博主在这里&#xff01;】&#x1f31f; &#x1f4e3;开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主&#xff01; &#x1f…...

k8s node 内存碎片化如何优化?

在 Kubernetes 集群中&#xff0c;内存碎片化&#xff08;Memory Fragmentation&#xff09;会导致系统无法分配连续的内存块&#xff0c;即使总内存充足&#xff0c;也可能触发 OOM&#xff08;Out of Memory&#xff09;或影响性能。以下是针对 k8s Node 内存碎片化的优化策略…...

当K8S容器没有bash时7种高阶排查手段

遇到容器没有bash甚至没有sh的情况&#xff0c;就像被困在没有门窗的房间。但真正的K8S运维高手&#xff0c;即使面对这种情况也能游刃有余。以下是我们在生产环境锤炼出的7大实战技巧&#xff1a; 一、基础三板斧&#xff08;新手必学&#xff09; 1. 日志捕获术——穿透重启…...

linux -c程序开发

目的是在linux中创建可执行的c语言程序的步骤 和gcc,make和git的简单运用 建立可执行程序的步骤: -1:预处理: --:头文件展开;--去掉注释;--宏替换;--条件编译 -2:编译 --:将预处理之后的c语言替换为汇编语言带阿米 --:语法分析,语义分析,代码生成 --:检查语法正确性并且优…...

LLM损失函数面试会问到的

介绍一下KL散度 KL&#xff08;Kullback-Leibler散度衡量了两个概率分布之间的差异。其公式为&#xff1a; D K L ( P / / Q ) − ∑ x ∈ X P ( x ) log ⁡ 1 P ( x ) ∑ x ∈ X P ( x ) log ⁡ 1 Q ( x ) D_{KL}(P//Q)-\sum_{x\in X}P(x)\log\frac{1}{P(x)}\sum_{x\in X}…...

【redis】redis 手动切换主从

场景一&#xff1a; 测试需要&#xff0c;需要手动切换主从 在redis节点&#xff1a; $ redis-cli -h xx.xx.xx.xx -p XX -a XX shutdown 不要直接关闭redis进程&#xff0c;使用 shutdown &#xff0c;能在进程关闭前持久化内存中的数据 待主从切换完毕后&#xff1…...

Webug4.0靶场通关笔记17- 第21关文件上传(htaccess)

目录 第21关 文件上传(htaccess) 1.打开靶场 2.源码分析 &#xff08;1&#xff09;右键源码 &#xff08;2&#xff09;源码分析 3.渗透实战 &#xff08;1&#xff09;配置环境 &#xff08;2&#xff09;构造脚本 &#xff08;3&#xff09;访问脚本 本文通过《webu…...

ASP.NET Core 中间件

文章目录 前言一、中间件的本质定义&#xff1a;类比&#xff1a; 二、作用场景&#xff1a;三、中间件的执行顺序四、中间件的配置方式1&#xff09;委托形式&#xff08;最常见&#xff09;&#xff1a;2&#xff09;类形式&#xff1a; 五、核心方法六、注意事项七、中间件 …...

Linux:进程间通信---命名管道共享内存

文章目录 1.命名管道1.1 命名管道是什么1.2 如何创建命名管道1.3 如何通过命名管道实现进程间通信 2. 共享内存2.1 共享内存的原理2.2 共享内存的系统接口与接口的调用2.3 共享内存的挂接2.4 共享内存的特性 序&#xff1a;在上一章对用来进行进程间通信的匿名管道进行了详细的…...

一个基于Asp.Net Core + Angular + Bootstrap开源CMS系统

从零学习构建一个完整的系统 推荐一个功能强大、易于扩展、安全可靠的开源内容管理系统&#xff0c;适用于各种类型和规模的网站。 项目简介 MixCoreCMS是一个基于.NET Core框架的开源内容管理系统&#xff08;CMS&#xff09;&#xff0c;提供了丰富的的基础功能和插件&…...

ECMAScript 6(ES6):JavaScript 现代化的革命性升级

1. 版本背景与发布 发布时间&#xff1a;2015 年 6 月&#xff0c;由 ECMA International 正式发布&#xff0c;标准编号为 ECMA-262 Edition 6&#xff08;后称 ES2015&#xff09;。历史意义&#xff1a; JavaScript 诞生 20 年后的革命性升级&#xff0c;首次引入类&#…...

基于WebUI的深度学习模型部署与应用实践

引言 随着深度学习技术的快速发展,如何将训练好的模型快速部署并提供友好的用户交互界面成为许多AI项目落地的关键。WebUI(Web User Interface)作为一种轻量级、跨平台的解决方案,正被广泛应用于各类AI模型的部署场景。本文将详细介绍基于Python生态构建WebUI的技术方案,包…...

MySQL表的增删查改

目录 一、MySQL表的增删查改二、Create单行数据全列插入多行数据 指定列插入插入否则更新替换数据 三、RetrieveSELECT 列WHERE 条件NULL的查询结果排序筛选分页结果 四、Update将孙悟空同学的数学成绩修改为80分将曹孟德同学的数学成绩修改为60分&#xff0c;语文成绩修改为7…...

Android第六次面试总结之Java设计模式(二)

一、适配器模式&#xff08;Adapter Pattern&#xff09; 1. ListView vs RecyclerView 的 Adapter 核心区别&#xff1f;为什么 RecyclerView 需要 ViewHolder&#xff1f; 解答&#xff1a; 核心区别&#xff1a; 特性ListView.Adapter&#xff08;如 ArrayAdapter&#xf…...

QuecPython+腾讯云:快速连接腾讯云l0T平台

该模块提供腾讯 IoT 平台物联网套件客户端功能,目前的产品节点类型仅支持“设备”&#xff0c;设备认证方式支持“一机一密”和“动态注册认证”。 BC25PA系列不支持该功能。 初始化腾讯 IoT 平台 TXyun TXyun(productID, devicename, devicePsk, ProductSecret)配置腾讯 IoT…...

说下RabbitMQ的整体架构

RabbitMQ 是一个基于 AMQP&#xff08;Advanced Message Queuing Protocol&#xff09; 协议的开源消息中间件&#xff0c;RabbitMQ的整体架构围绕消息的生产、路由、存储和消费设计&#xff0c;旨在实现高效、可靠的消息传递&#xff0c;它由多个核心组件协同工作。 核心组件 …...

Qt Creator 网络编程----Socket客户端服务端

1、在Qt项目中的.pro中添加 network模块&#xff0c;用于Socket网络编程使用 QT network 2、相关Tcp网络通信协议头文件 #include <QtNetwork/QTcpServer> #include <QtNetwork/QTcpSocket> #include <QtNetwork/QHostAddress> 3、Qt socket运行实…...

《深度学习实践教程》[吴微] ch-5 3/5层全连接神经网络

一、练习课本上3层全连接神经网络识别手写数字。 答案代码&#xff1a; import torch from torch import nn, optim from torch.autograd import Variable from torch.utils.data import DataLoader from torchvision import datasets, transforms# 定义一些超参数 batch_size…...

OrcaFex11.5

OrcaFlex 11.5是一款专业的海洋工程动态分析软件 由英国Orcina公司开发 主要用于模拟和分析海洋结构物在复杂海洋环境中的动态响应 该软件广泛应用于海上油气开发 海上风电 海洋可再生能源等领域 OrcaFlex 11.5具有强大的建模和仿真能力 支持多种海洋结构物的模拟 包括船舶 …...

MUX-vlan

MUX-VLAN 理论环节 1. 定义与核心作用 Principal VLAN&#xff08;主VLAN&#xff09; 是 MUX VLAN&#xff08;Multiplex VLAN&#xff09;架构的核心组件&#xff0c;充当公共资源的访问枢纽&#xff0c;实现以下核心功能&#xff1a; 资源共享&#xff1a;允许所有从VLAN…...

vue3中解决 return‘ inside ‘finally‘ block报错的问题

vue3中解决 return’ inside ‘finally’ block报错的问题 这个错误信息通常表明你在使用Vue 3框架时&#xff0c;在finally块中不正确地使用了return语句。在JavaScript中&#xff0c;finally块是保证执行的最后一个代码块&#xff0c;用于释放资源或执行清理操作&#xff0c;…...

TestStand API 简介

TestStand API 简介 在自动化测试领域&#xff0c;TestStand 凭借其灵活的架构和强大的功能&#xff0c;成为众多开发者的首选工具。而 TestStand API&#xff08;Application Programming Interface&#xff0c;应用程序编程接口&#xff09;则是打开 TestStand 强大功能的 “…...

vue2+element实现Table表格嵌套输入框、选择器、日期选择器、表单弹出窗组件的行内编辑功能

vue2element实现Table表格嵌套输入框、选择器、日期选择器、表单弹出窗组件的行内编辑功能 文章目录 vue2element实现Table表格嵌套输入框、选择器、日期选择器、表单弹出窗组件的行内编辑功能前言一、准备工作二、行内编辑1.嵌入Input文本输入框1.1遇到问题1.文本框内容修改失…...

【Docker系列】使用格式化输出与排序技巧

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

针对面试-redis篇

1. 缓存穿透 什么是缓存穿透&#xff1f; 缓存穿透就是有人查询一个不存在的数据&#xff0c;数据库查询不到数据也不会直接写入缓存&#xff0c;就会导致每次请求都查数据库。 解决方案一&#xff1a;缓存空数据 当数据库中不存在该数据时&#xff0c;直接把查到的空数据给…...

HTML8:媒体元素

视频和音频 视频元素 video 音频 audio <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>媒体元素学习</title> </head> <body> <!--音频和视频 src:资源路径 controls:控制条…...

把其他conda的env复制到自己电脑的conda上

把其他conda的env复制到自己电脑的conda上 一 拷贝 将要拷贝的env环境拷贝到自己电脑的放置env环境的文件夹中 二 添加配置 找到.conda文件夹下的environments.txt文件&#xff0c;添加配置 三 测试 查看环境是否拷贝成功 激活环境 自此就拷贝成功了&#xff01;&am…...

抖音热门视频评论数追踪爬虫获取

自动追踪抖音账号收藏夹视频的评论数变化 功能&#xff1a; 1、自动追踪特定抖音账号收藏夹视频热度变化&#xff0c;评论增速超过x&#xff0c;自动通知到钉钉或飞书 2、最新最先进的js逆向算法&#xff0c;无封号风险 3、支持私有化定制 4、可同时追踪500-5w个视频的热度…...

Hive优化秘籍:大数据处理加速之道

目录 一、认识 Hive 性能瓶颈 二、优化从基础开始&#xff1a;查询语句 2.1 列与分区裁剪 2.2 谓词下推 2.3 合理使用排序 三、解决数据倾斜难题 3.1 数据倾斜原因剖析 3.2 针对性优化策略 四、优化 join 操作 4.1 MapJoin 的应用 4.2 大表 join 优化技巧 五、调整 …...

机器学习例题——预测facebook签到位置(K近邻算法)和葡萄酒质量预测(线性回归)

一、预测facebook签到位置 代码展示&#xff1a; import pandas as pd from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import…...

10B扩散文生图模型F-Lite技术报告速读

F Lite 技术报告解析 一、研究背景与目标 F Lite 是一个开源的 100 亿参数文本到图像的扩散变换器&#xff08;DiT&#xff09;模型。该研究的目标是探索在中等数据规模和计算资源条件下&#xff0c;大规模扩散模型的性能边界。F Lite 基于 Freepik 内部数据集训练&#xff0…...

源码分析之Leaflet中Marker

概述 Marker类用于创建一个标记点对象,可以用于在地图上添加标记点。Marker类继承自Layer类,提供了一些方法用于创建标记点对象。 源码分析 源码实现 Marker类实现如下&#xff1a; export var Marker Layer.extend({options: {icon: new IconDefault(), // 默认图标实例…...

从0开始学习大模型--Day2--大模型的工作流程以及初始Agent

大模型的工作流程 分词化&#xff08;Tokenization&#xff09;与词表映射 分词化&#xff08;Tokenization&#xff09;是自然语言处理&#xff08;NLP&#xff09;中的重要概念&#xff0c;它是将段落和句子分割成更小的分词&#xff08;token&#xff09;的过程。 将一个…...

P48-56 应用游戏标签

这一段课主要是把每种道具的游戏Tag进行了整理与应用 AuraAbilitySystemComponentBase.h // Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "AbilitySystemComponent.h"…...

4.29 tag的完整实现和登录页面的初步搭建

解释了v-for中每个属性的作用&#xff1a; 打印当前route的信息&#xff1a;&#xff08;里面会有path的信息&#xff09;当前的路由信息吧&#xff01; handleMenu() 菜单选择&#xff01;点击左侧菜单的栏目就会显示在Home.vue的tag上 这个方法的作用是让Home.vue上出现对应的…...

【Vue.js】 插槽通信——具名插槽通信

目录 前景基本语法命名规则默认内容使用建议 具体实例父组件 index.vue子组件 Category.vue 效果 前景 下面的父子组件代码仍然在Vue.js演练平台直接运行 基本语法 在子组件中定义插槽 <!-- Category.vue --> <slot name"插槽名称">默认内容</slo…...