"""screenCaptureNoConfirm
pywebview 通过js跳过确认直接获取屏幕媒体流
"""
import webview
import threading
import time
# -------------------------- 1. PyWebView配置 --------------------------
class ScreenCaptureAPI:
def __init__(self):
self.window = None
def set_window(self, window):
self.window = window
def auto_trigger_capture(self):
"""后台自动触发屏幕采集(模拟用户点击)"""
# 延迟1秒(等待页面加载完成)
time.sleep(1)
# 执行JS自动点击按钮,触发屏幕采集
self.window.evaluate_js("document.getElementById('autoCaptureBtn').click();")
# -------------------------- 2. 前端HTML(核心:自动触发+无感采集) --------------------------
HTML_CONTENT = """
自动获取屏幕流
状态:等待自动采集...
"""
# -------------------------- 3. 主程序入口 --------------------------
if __name__ == "__main__":
# 初始化API
api = ScreenCaptureAPI()
# 创建pywebview窗口(关键配置:WebView2引擎+权限豁免)
window = webview.create_window(
title="自动获取屏幕流",
html=HTML_CONTENT,
width=1400,
height=900,
resizable=True,
# confirm_close=True,
# 额外权限配置(WebView2)
# webview_settings={
# "web_security": False, # 关闭跨域限制(本地运行需开启)
# "allow_displaying_insecure_content": True,
# "allow_running_insecure_content": True
# },
js_api=api
)
api.set_window(window)
# 定义页面加载完成后的回调(自动触发采集)
def on_page_loaded():
# 启动线程自动触发点击
trigger_thread = threading.Thread(target=api.auto_trigger_capture, daemon=True)
trigger_thread.start()
# 暴露API给前端
api.page_loaded = on_page_loaded
# 启动pywebview
try:
webview.start(
private_mode=False, # 关键:关闭私有模式,授予本地权限
debug=True,
http_server=True
)
except KeyboardInterrupt:
print("程序已终止")