You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python调用subprocess.Popen.kill无法关闭Chrome浏览器窗口怎么办

问题原因
  • Chrome默认采用多进程架构,你通过subprocess.Popen启动的只是Chrome的主调度进程,后续打开页面、渲染PDF的都是它 fork 出来的子进程,只调用a.kill()杀主进程不会影响子进程运行,所以窗口会保留。
  • 模拟ctrl+w无效是因为快捷键触发时Chrome窗口没有处于前台激活状态,按键指令没有被Chrome捕获。
修复方案

方案1:最小改动适配现有逻辑(推荐)

先安装psutil库用来完整杀掉进程树:

pip install psutil

修改后的代码如下:

import time
import subprocess
import keyboard
import psutil

def chrome():
    test = "test"
    name = "file:///C://Users//akcgo//Documents//CARB//ARBER//PDFS//Company A.pdf"
    # 启动时加参数让Chrome开独立新窗口,避免和已有Chrome进程合并
    a = subprocess.Popen([
        "C://Program Files (x86)//Google//Chrome//Application//chrome.exe",
        "--new-window",
        name # 直接传入PDF路径,不用模拟键盘输入更稳定
    ])
    time.sleep(1)
    keyboard.press_and_release(['ctrl', 'p'])
    time.sleep(1)
    keyboard.press_and_release('enter')
    time.sleep(1)
    keyboard.write(test)
    time.sleep(.5)
    keyboard.press_and_release('enter')
    time.sleep(2)
    # 杀掉整个进程树,包含所有子进程
    parent = psutil.Process(a.pid)
    for child in parent.children(recursive=True):
        child.kill()
    parent.kill()

方案2:不用第三方库的Windows兼容方案

如果不想装额外库,可以直接调用Windows系统的taskkill命令杀掉关联的所有Chrome进程,注意如果有其他手动打开的Chrome窗口也会被一起关闭,适合只有自动化脚本用Chrome的场景:
把最后的a.kill()替换成:

subprocess.run(["taskkill", "/F", "/T", "/PID", str(a.pid)], capture_output=True)

额外优化建议

可以在Chrome启动参数里加--kiosk-printing,开启静默打印模式,触发打印后会自动走默认打印机(你设置的PDF保存),不需要手动按回车确认,能减少模拟按键的步骤,降低出错概率。

内容的提问来源于stack exchange,提问作者acruz23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 16:39:03