QWebEngineProfile
是 PySide/Qt 中用于管理浏览器引擎(WebEngine)配置的类,属于 QtWebEngineCore
模块。它主要用于控制网页的全局行为,例如缓存、Cookie、持久化存储、用户代理(User-Agent)、代理设置等。每个 QWebEngineProfile
可以关联多个 QWebEnginePage
或 QWebEngineView
,实现不同配置的页面隔离。
核心功能
- 存储管理
控制浏览器数据的存储路径(缓存、Cookies、本地存储等)。 - 用户代理(User-Agent)
自定义浏览器的 User-Agent 字符串。 - HTTP 头与请求拦截
修改 HTTP 请求头或拦截请求。 - 权限控制
管理地理位置、摄像头/麦克风访问等权限。 - Cookie 策略
管理 Cookie 的存储和过滤。
基本用法示例
1. 创建自定义 Profile
from PySide6.QtWebEngineCore import QWebEngineProfile, QWebEnginePage
from PySide6.QtWebEngineWidgets import QWebEngineView
from PySide6.QtCore import QUrl
# 创建一个自定义 Profile
custom_profile = QWebEngineProfile("MyCustomProfile")
# 设置存储路径(需在页面加载前设置)
custom_profile.setPersistentStoragePath("./web_data")
custom_profile.setCachePath("./web_cache")
# 创建页面并关联 Profile
web_page = QWebEnginePage(custom_profile)
web_view = QWebEngineView()
web_view.setPage(web_page)
# 加载网页
web_view.load(QUrl("https://www.example.com"))
web_view.show()
2. 自定义 User-Agent
# 修改 User-Agent
custom_profile.setHttpUserAgent(
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) MyCustomBrowser/1.0"
)
3. 管理 Cookies
# 获取 Cookie 存储对象
cookie_store = custom_profile.cookieStore()
# 删除所有 Cookies
cookie_store.deleteAllCookies()
# 监听 Cookie 变化
cookie_store.cookieAdded.connect(lambda cookie: print("Cookie added:", cookie.name()))
4. 拦截 HTTP 请求
from PySide6.QtWebEngineCore import QWebEngineUrlRequestInterceptor
class RequestInterceptor(QWebEngineUrlRequestInterceptor):
def interceptRequest(self, info):
# 修改请求头
info.setHttpHeader(b"X-Custom-Header", b"MyValue")
# 拦截特定 URL
if b"blocked-site.com" in info.requestUrl().toString().encode():
info.block(True)
# 绑定拦截器到 Profile
interceptor = RequestInterceptor()
custom_profile.setUrlRequestInterceptor(interceptor)
5. 权限管理
def handle_feature_permission(page, origin, feature):
if feature == QWebEnginePage.PermissionFeature.Geolocation:
# 允许地理位置权限
page.setFeaturePermission(origin, feature, QWebEnginePage.PermissionGrantedByUser)
else:
# 拒绝其他权限
page.setFeaturePermission(origin, feature, QWebEnginePage.PermissionDeniedByUser)
# 绑定权限请求信号
web_page.featurePermissionRequested.connect(handle_feature_permission)
默认 Profile
Qt 提供了一个默认的全局 Profile,可通过 defaultProfile()
访问:
default_profile = QWebEngineProfile.defaultProfile()
注意事项
- 多 Profile 隔离
不同 Profile 之间的数据(如 Cookies、缓存)是隔离的。 - 生命周期管理
QWebEngineProfile
必须在应用的生命周期内保持有效(避免提前释放)。 - 路径权限
确保设置的存储路径有读写权限。
通过灵活配置 QWebEngineProfile
,可以实现高度定制的浏览器行为,适用于多账户登录、隐私模式等场景。