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…

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

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

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;清…

基于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;…

生产上线需要注意的安全漏洞

一、关闭swagger 1、关闭swagger v3 # 需同时设置auto-startupfalse&#xff0c;否则/v3/api-docs等接口仍能继续访问 springfox:documentation:enabled: falseauto-startup: falseswagger-ui:enabled: false 2、关闭swagger v2 # 只要不是true就不启用 swagger:enable: fa…

代立冬:基于Apache Doris+SeaTunnel 实现多源实时数据仓库解决方案探索实践

大家好&#xff0c;我是白鲸开源的联合创始人代立冬&#xff0c;同时担任 Apache DolphinScheduler 的 PMC chair 和 SeaTunnel 的 PMC。作为 Apache Foundation 的成员和孵化器导师&#xff0c;我积极参与推动多个开源项目的发展&#xff0c;帮助它们通过孵化器成长为 Apache …

某度旋转验证码v2 逆向分析

v2主要依据是核心 JS 文件mkd_v2.js 版本&#xff0c;如下图所示&#xff1a; 第一次 https://passport.baidu.com/cap/init 接口&#xff0c;请求的 ak 是固定值&#xff0c;当然不同场景不同网站是不一样的&#xff0c;_ 时间戳&#xff0c;ver1&#xff0c;返回值 as、tk 都…

android项目实战之使用框架 集成多图片、视频的上传

效果图 实现方式&#xff0c;本功能使用PictureSelector 第三方库 。作者项目地址&#xff1a;https://github.com/LuckSiege/PictureSelector 1. builder.gradle 增加 implementation io.github.lucksiege:pictureselector:v3.11.1implementation com.tbruyelle.rxpermissio…

线性回归实战

3.1 使用正规方程进行求解 3.1.1 简单线性回归 公式 &#xff1a; y w x b y wx b ywxb 一元一次方程&#xff0c;在机器学习中一元表示一个特征&#xff0c;b表示截距&#xff0c;y表示目标值。 使用代码进行实现&#xff1a; 导入包 import numpy as np import matp…

中缀表达式转后缀表达式与后缀表达式计算(详解)

**中缀表达式转后缀表达式的一般步骤如下&#xff1a; 1&#xff1a;创建一个空的栈和一个空的输出列表。 2&#xff1a;从左到右扫描中缀表达式的每个字符。 3&#xff1a;如果当前字符是操作数&#xff0c;则直接将其加入到输出列表中。 4&#xff1a;如果当前字符是运算符&a…

Linux 常用命令汇总

1 linux定时任务 查看定时任务&#xff1a;crontab -l 每晚一点半执行定时任务&#xff1a; 30 1 * * * sh /var/lib/pgsql/pg_db_backup.sh >> /var/lib/pgsql/pg_db_backup.log 2>&1 配置定时任务&#xff1a;crontab -e 2 linux 内核版本查询 cat /etc/r…