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 进程。
<小时/>You can find a detailed discussion in Selenium : How to stop geckodriver process impacting PC memory, without calling driver.quit()?
仅此 google-chrome 很难识别并杀死它打开由 ChromeDriver 打开的 https://google.com
的进程,因为当通过 Google Chrome 执行自动化测试时,您将观察到可能有数十个 Google Chrome 进程正在运行,可以通过 Windows 任务管理器的“进程”选项卡进行观察。
根据文章Why Google Chrome Has So Many Processes为了获得更好的用户体验,Google Chrome 发起了大量 windows 自动化测试打开的每个选项卡的后台进程。 Google 试图通过将每个网页分成其认为合适的多个进程来保持浏览器的稳定,以确保如果页面上的一个进程失败,则可以终止或刷新该特定进程,而无需终止或刷新整个进程页。
You can find a detailed discussion in Many process of Google Chrome (32 bit)
因此,检索单个 pid 并终止唯一的进程对您没有帮助。
<小时/>根据最佳实践,您的测试平台应该是:
- 配置了所有必需的软件、库和二进制文件。
- 测试执行必须在受控环境中执行,以优化性能。
- 当您的
@Tests
正在执行时,它应该不受手动干预。 - 特别是当您的
@Tests
基于Selenium,而测试执行处于InProgress时,测试环境不应受到干预。
You can find a detailed discussion in Way to open Selenium browser not ovelapping my current browser
关于python - 在 python 中杀死某些 chrome 进程,而不是全部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57792469/