Python Appium Selenium 查杀进程的实用方法

一、前置说明

在自动化过程中,经常需要在命令行中执行一些操作,比如启动应用、查杀应用等,因此可以封装成一个CommandExecutor来专门处理这些事情。

二、操作步骤

# cmd_util.pyimport logging
import os
import platform
import shutil
import subprocessimport psutillogger = logging.getLogger(__name__)class CommandExecutor:@staticmethoddef execute_command(command):"""subprocess.run() 方法用于执行命令并等待其完成,然后返回一个 CompletedProcess 对象,该对象包含执行结果的属性。它适用于需要等待命令完成并获取结果的情况。"""try:result = subprocess.run(command, shell=True, capture_output=True, text=True)if result.returncode == 0:return result.stdout.strip()else:return result.stderr.strip()except Exception as e:return str(e)@classmethoddef kill_processes_with_name(cls, name):"""查杀窗口名称包含 name 的所有进程,支持模拟匹配"""try:if platform.system() == 'Windows':# Windows系统使用tasklist和findstr命令来获取包含特定字符串的窗口进程列表command = f'tasklist /V /FO CSV | findstr /C:"{name}"'output = cls.execute_command(command)if output:# 遍历输出的进程列表for line in output.splitlines():# 解析进程信息process_info = line.split(",")process_name = process_info[0].strip('"')process_id = process_info[1].strip('"')# 先尝试关父进程,解决:关掉uiautomatorview或appium server 之后, 会留下一个无用的cmd的窗口try:# 获取父进程parent_process = psutil.Process(int(process_id)).parent()# 终止父进程(CMD窗口)kill_parent_command = f"taskkill /F /T /PID {parent_process.pid}"cls.execute_command(kill_parent_command)except:pass# 如果没有父进程,则直接关闭子进程;如果父进程已关闭,子进程会消失,也try catch 一下try:# 终止进程kill_command = f"taskkill /F /T /PID {process_id}"cls.execute_command(kill_command)# 记录日志logger.info(f"Stopped process '{process_name}' with ID '{process_id}'")except:passelse:logger.info(f"No processes found with window name containing '{name}'")else:# 其他操作系统使用wmctrl命令获取包含特定字符串的窗口列表command = f"wmctrl -l | grep {name}"window_list = cls.execute_command(command)if window_list:# 遍历输出的窗口列表for line in window_list.splitlines():# 解析窗口信息window_info = line.split()window_id = window_info[0]# 关闭窗口os.system(f"wmctrl -ic {window_id}")# 记录日志logger.info(f"Stopped processes with window name containing '{name}'")else:logger.info(f"No processes found with window name containing '{name}'")except Exception as e:logger.warning(f"Error: {str(e)}")cmd_executor = CommandExecutor()
cmd = cmd_executor

三、Demo验证

以关闭多开的两个夜神模拟器,来测试代码,顺利关闭:

if __name__ == '__main__':import logginglogging.basicConfig(level=logging.DEBUG)print(cmd.kill_processes_with_name('夜神'))

欢迎技术交流:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/207156.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java编程中通用的正则表达式(二)

正则表达式,又称正则式、规则表达式、正规表达式、正则模式或简称正则,是一种用来匹配字符串的工具。它是一种字符串模式的表示方法,可以用来检索、替换和验证文本。正则表达式是一个字符串,它描述了一些字符的组合,这…

dockers安装rabbitmq

RabbitMQ: easy to use, flexible messaging and streaming — RabbitMQhttps://www.rabbitmq.com/ Downloading and Installing RabbitMQ — RabbitMQ docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.12-management 之后参照:dock…

高低压配电智能监控系统

高低压配电智能监控系统是一种综合运用物联网、云计算、大数据和人工智能等技术的智能化监控系统,主要用于对高低压配电设备进行实时监测、数据采集、故障预警和远程管理。 该系统通过安装智能传感器、智能设备、网络通讯技术等手段,依托电易云-智慧电力…

解决“由于找不到msvcr110.dll无法继续执行”的错误问题,一键修复msvcr110.dll丢失

当你遇到“由于找不到msvcr110.dll无法继续执行”的错误时,通常是因为你的电脑缺少相关的msvcr110.dll文件。如果你的电脑中缺失了msvcr110.dll文件丢失那么可以根据下面的方法尝试解决msvcr110.dll丢失的问题。 一.解决msvcr110.dll丢失的方法 使用dll修复工具 D…

设计图中时序图

设计图中的时序图通常用于展示两个或多个对象之间的交互和消息传递的顺序。它是一种用于描述软件或系统中的并发性和时序行为的工具。 以下是一个简单的时序图的示例: 首先,在时序图中创建两个对象,例如"对象A"和"对象B&quo…

学习笔记9——JUC三种量级的锁机制

学习笔记系列开头惯例发布一些寻亲消息 链接:https://baobeihuijia.com/bbhj/contents/3/197325.html 多线程访问共享资源冲突 临界区:一段代码块存在对共享资源的多线程读写操作,称这段代码块为临界区 竞态条件:多个线程在临界…

Linux OpenMP使用总结

当涉及到编写 Linux OpenMP 程序时,以下是体会: 了解 OpenMP 基础:在使用 OpenMP 进行并行编程之前,确保您了解并行编程的基本概念和 OpenMP 的工作原理。您可以参考 OpenMP 的官方文档或其他相关资源来获取更多信息。配置 OpenM…

#HarmonyOS:@Styles装饰器:定义组件重用样式

Styles可以定义在组件内或全局,在全局定义时需在方法名前面添加function关键字,组件内定义时则不需要添加function关键字。 组件内Styles的优先级高于全局Styles。 框架优先找当前组件内的Styles,如果找不到,则会全局查找。 // …

GO设计模式——3、抽象工厂模式(创建型)

目录 抽象工厂模式(Abstract Factory Pattern) 抽象工厂模式的核心角色 优缺点 代码实现 抽象工厂模式(Abstract Factory Pattern) 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他…

单词倒排

对字符串中的所有单词进行倒排。 说明: 1、构成单词的字符只有26个大写或小写英文字母; 2、非构成单词的字符均视为单词间隔符; 3、要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排…

yolo目标检测+目标跟踪+车辆计数+车辆分割+车道线变更检测+速度估计

这个项目使用YOLO进行车辆检测,使用SORT(简单在线实时跟踪器)进行车辆跟踪。该项目实现了以下任务: 车辆计数车道分割车道变更检测速度估计将所有这些详细信息转储到CSV文件中 车辆计数是指在道路上安装相应设备,通过…

windows下 Tomcat启动黑框隐藏

进入到 tomcat/bin 目录下,找到此文件 setclasspath.bat ,右键文本打开 找到此属性 : set _RUNJAVA"%JRE_HOME%\bin\java.exe"修改成以下属性,保存文件,重启启动tomcat会发现黑框不默认弹出了: …

使用hutool工具生成非对称加密公私密钥以及使用案例

1.导入hutool依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.18</version></dependency>2.直接复制代码 package com.common.utils;import cn.hutool.core.codec.Base64; i…

仅需30秒完美复刻任何人的声音 - 最强AI音频11Labs

我的用词一直都挺克制的&#xff0c;基本不会用到“最强”这个字眼。 但是这一次的这个AI应用&#xff0c;是我认为在TTS&#xff08;文字转音频&#xff09;这个领域&#xff0c;当之无愧的“最强”。 ElevenLabs&#xff0c;简称11Labs。 仅需30秒到5分钟左右的极少的数据集…

机器学习-分类问题

前言 《机器学习-回归问题》知道了回归问题的处理方式,分类问题才是机器学习的重点.从数据角度讲,回归问题可以转换为分类问题的微分 逻辑回归 逻辑回归&#xff08;Logistics Regression&#xff09;,逻辑回归虽然带有回归字样&#xff0c;但是逻辑回归属于分类算法。但只可…

极大提升GPT-4等模型推理效率,微软、清华开源全新框架

随着用户需求的增多&#xff0c;GPT-4、Claude等模型在文本生成、理解、总结等方面的能力越来越优秀。但推理的效率并不高&#xff0c;因为&#xff0c;多数主流模型采用的是“顺序生成词”方法&#xff0c;会导致GPU利用率很低并带来高延迟。 为了解决这一难题&#xff0c;清…

美国Linux服务器的iptables防火墙介绍

美国Linux服务器防火墙一般分为硬件防火墙和软件防火墙&#xff0c;但不论是硬件防火墙还是软件防火墙&#xff0c;都需要通过使用硬件作为联机的介质&#xff0c;也需要使用软件来设定美国Linux服务器安全政策&#xff0c;因此可以从使用的硬件与操作系统来加以区分。硬件防火…

oracle怎么推进scn?

很多时候&#xff0c;数据库有故障打不开&#xff0c;需要用到推进scn的技术&#xff0c;这里介绍下12c及以上版本的oracle怎么推进数据库的scn。 经测试发现&#xff0c;数据库mount和open状态下都可以通过此方法推进SCN。 Session1&#xff1a; 查询当前SCN SQL> select c…

基于jsp+servlet的图书管理系统

基于jspservlet的图书管理系统演示地址为 图书馆后台管理系统 用户名:mr ,密码:123 图书馆管理系统主要的目的是实现图书馆的信息化管理。图书馆的主要业务就是新书的借阅和归还&#xff0c; 因此系统最核心的功能便是实现图书的借阅和归还。此外&#xff0c;还需要提供图书…

Stable Diffusion XL on diffusers

Stable Diffusion XL on diffusers 翻译自&#xff1a;https://huggingface.co/docs/diffusers/using-diffusers/sdxl v0.24.0 非逐字翻译 Stable Diffusion XL (SDXL) 是一个强大的图像生成模型&#xff0c;其在上一代 Stable Diffusion 的基础上主要做了如下优化&#xff1a;…