python - 杀死python中的某些chrome进程,而不是全部
问题描述
import subprocess
from selenium import webdriver
chrom_path = r"C:\Users\user\Downloads\chromedriver_win32\chromedriver.exe"
driver = webdriver.Chrome(chrom_path)
link = 'https://google.com'
driver.get(link)
s = driver.page_source
print((s.encode("utf-8")))
subprocess.call("TASKKILL /f /IM CHROME.EXE")
subprocess.call("TASKKILL /f /IM CHROMEDRIVER.EXE")
这段代码运行良好,但我的代码不仅杀死了这个特定的进程,还杀死了所有 chrome 进程。我只想杀死这个打开https://google.com的 chrome 进程
有没有办法做到这一点?
解决方案
你说得很对。
subprocess.call("TASKKILL /f /IM CHROME.EXE")
:这行代码会杀死所有正在运行的chrome进程。subprocess.call("TASKKILL /f /IM CHROMEDRIVER.EXE")
: 这行代码会杀死所有正在运行的ChromeDriver进程。
您可以在 Selenium 中找到详细讨论:如何在不调用 driver.quit() 的情况下停止影响 PC 内存的 geckodriver 进程?
仅识别和杀死ChromeDriver正在打开的这个google-chrome进程是很困难的,因为当通过Google Chrome执行自动化测试时,您会观察到可能有数十个 Google Chrome 进程正在运行,可以观察到通过 Windows 任务管理器的进程选项卡。https://google.com
根据文章为什么谷歌浏览器有这么多进程以获得更好的用户体验 谷歌浏览器会为您的自动测试打开的每个选项卡启动许多Windows后台进程。谷歌试图通过将每个网页分成它认为合适的多个进程来保持浏览器的稳定性,以确保如果页面上的一个进程失败,则可以终止或刷新该特定进程,而无需终止或刷新整个页。
您可以在Google Chrome(32 位)的许多进程中找到详细讨论
因此,检索单个pid并杀死唯一的进程对您没有帮助。
根据最佳实践,您的测试台应该是:
- 配置了所有必需的软件、库和二进制文件。
- 测试执行必须在受控环境中执行以优化性能。
- 在您
@Tests
执行时,它应该不受Manual Intervention的影响。 - 特别是当您基于Selenium时,而测试执行
@Tests
正在进行中,则不应干预测试环境。
您可以在打开 Selenium 浏览器的方式中找到详细讨论,而不覆盖我当前的浏览器
推荐阅读
- xamarin.forms - Xamarin.Forms 发送键
- node.js - Node.js:使用 http 请求会话维护 cookie
- flutter - 如何监听提供者类中的变量变化?
- sql - 要回答的 SQL 查询:如果
发生在时间点 A,是否 发生在公元前? - python - 用双字母打印单词打印两次
- javascript - Js的新手,我如何获得这个请求的价值?
- python - 输出在python中选择了分数>平均分数的变量
- c - 当随机数生成器已播种时,rand() 是否确实会产生随机值?
- javascript - rxjs - 同时具有 on-next 和 on-error 回调的运算符?
- angular - 使分页发生在内行,而不是组行本身