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

PyWebView关闭窗口后调用get_cookies报KeyError: 'master'求助

问题解决方法

错误原因分析

  1. KeyError: 'master':webview.start()是阻塞调用,窗口关闭后,webview底层的浏览器实例已被销毁,此时调用window.get_cookies()会因为找不到对应实例而抛出KeyError。
  2. 窗口崩溃+进程无法终止:在closing事件处理器中使用同步网络请求(urllib.request.urlopen)会阻塞UI线程,导致窗口无法正常完成关闭流程,最终造成进程僵死。

正确实现方式

使用线程处理网络请求,避免阻塞UI线程;同时在closing事件中安全获取cookies(此时窗口尚未完全销毁,实例仍存在):

import webview
import sys
import urllib.request
import threading

def send_cookies(cookies):
    # 在线程中执行网络请求,不阻塞UI
    url = f'{sys.argv[1]}/close?cookie={cookies}'
    try:
        urllib.request.urlopen(url)
    except Exception as e:
        print(f"发送请求失败: {e}")

def on_closing():
    # 窗口关闭前获取cookies
    cookies = window.get_cookies()
    # 启动线程处理网络请求
    threading.Thread(target=send_cookies, args=(cookies,), daemon=True).start()

window = webview.create_window(
    sys.argv[2],
    sys.argv[1],
    width=1280,
    height=720,
    min_size=(1280, 720)
)

window.events.closing += on_closing

webview.start(
    private_mode=False,
    storage_path='./gui'
)

关键说明

  • 使用threading.Thread将网络请求放到后台线程,避免阻塞UI线程,保证窗口能正常关闭。
  • 设置daemon=True,确保主线程退出时后台线程也会自动终止,防止进程残留。
  • 在closing事件中获取cookies,此时窗口实例尚未被销毁,不会触发KeyError。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 04:55:16