首页 > 解决方案 > 杀死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 进程

有没有办法做到这一点?

标签: pythonseleniumgoogle-chromeselenium-webdriverselenium-chromedriver

解决方案


你说得很对。

  • 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 进程正在运行,可以观察到通过 Windows 任务管理器的进程选项卡。https://google.com

根据文章为什么谷歌浏览器有这么多进程以获得更好的用户体验 谷歌浏览器会为您的自动测试打开的每个选项卡启动许多后台进程。谷歌试图通过将每个网页分成它认为合适的多个进程来保持浏览器的稳定性,以确保如果页面上的一个进程失败,则可以终止或刷新该特定进程,而无需终止或刷新整个页。

您可以在Google Chrome(32 位)的许多进程中找到详细讨论

因此,检索单个pid并杀死唯一的进程对您没有帮助。


根据最佳实践,您的测试台应该是:

  • 配置了所有必需的软件二进制文件
  • 测试执行必须在受控环境中执行以优化性能。
  • 在您@Tests执行时,它应该不受Manual Intervention的影响。
  • 特别是当您基于Selenium时,而测试执行@Tests正在进行中,则不应干预测试环境。

您可以在打开 Selenium 浏览器的方式中找到详细讨论,而不覆盖我当前的浏览器


推荐阅读