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

Python Selenium启动Chrome后立即自动关闭问题排查

问题核心原因

代码里两个问题直接导致浏览器秒关:

  • 链式调用写法错误:webdriver.Chrome(path).get("https://www.facebook.com/") 中,get() 方法本身无返回值(返回None),赋值给self.driver的根本不是Chrome驱动实例,既无法后续调用自动化方法,也没有持有有效驱动引用,执行完就会触发浏览器关闭。
  • 驱动实例未被持久持有:按钮回调的lambda里创建的Webdriver()是临时局部对象,回调执行完就会被Python垃圾回收机制回收,Selenium驱动实例被回收时会自动终止关联的Chrome进程,就会出现打开立刻关闭的现象。
修复方案

按下面两步修改即可实现浏览器常驻,后续可正常调用自动化能力:

  1. 修正Webdriver类实现,拆分驱动实例化和页面访问逻辑,加上Chrome的detach配置从配置层面禁止浏览器自动关闭。注意Selenium 4.6及以上版本不需要手动指定chromedriver路径,会自动匹配对应版本,旧版本再手动传路径即可。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import tkinter as tk

class Webdriver:
    def __init__(self):
        chrome_options = Options()
        # 开启detach配置,浏览器不会随驱动对象销毁自动关闭
        chrome_options.add_experimental_option("detach", True)
        # 旧版Selenium需要传路径就用下面这行
        # self.driver = webdriver.Chrome(executable_path="C:/Users/chromedriver.exe", options=chrome_options)
        # 新版Selenium直接传配置即可
        self.driver = webdriver.Chrome(options=chrome_options)
        # 单独调用get方法访问页面,不要链式调用赋值给driver
        self.driver.get("https://www.facebook.com/")
  1. 修正Tkinter按钮的回调逻辑,把创建的驱动实例绑定到Tk根窗口的属性上,持久持有引用避免被垃圾回收:
root = tk.Tk()

def open_browser():
    # 把驱动实例挂到root对象上,全局持有引用不会被回收
    root.driver = Webdriver().driver

# 不要直接在grid/pack方法处赋值组件对象,不然拿到的返回值是None
open_btn = tk.Button(root, text="Open the driver", command=open_browser)
open_btn.grid(row=5, column=1, columnspan=2, pady=10, padx=30)

root.mainloop()

后续实现登录、内容搜索等功能时,直接通过root.driver调用Selenium对应方法即可,元素定位、表单填写、点击操作都能正常执行。需要关闭浏览器时手动调用root.driver.quit()即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:06:21