Pyside的QWebEngineProfile类

发布于:2025-02-10 ⋅ 阅读:(101) ⋅ 点赞:(0)

QWebEngineProfile 是 PySide/Qt 中用于管理浏览器引擎(WebEngine)配置的类,属于 QtWebEngineCore 模块。它主要用于控制网页的全局行为,例如缓存、Cookie、持久化存储、用户代理(User-Agent)、代理设置等。每个 QWebEngineProfile 可以关联多个 QWebEnginePageQWebEngineView,实现不同配置的页面隔离。


核心功能

  1. 存储管理
    控制浏览器数据的存储路径(缓存、Cookies、本地存储等)。
  2. 用户代理(User-Agent)
    自定义浏览器的 User-Agent 字符串。
  3. HTTP 头与请求拦截
    修改 HTTP 请求头或拦截请求。
  4. 权限控制
    管理地理位置、摄像头/麦克风访问等权限。
  5. 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,可以实现高度定制的浏览器行为,适用于多账户登录、隐私模式等场景。


网站公告

今日签到

点亮在社区的每一天
去签到