当前位置: 首页 > article >正文

Pyside的QWebEngineProfile类

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,可以实现高度定制的浏览器行为,适用于多账户登录、隐私模式等场景。


http://www.kler.cn/a/525113.html

相关文章:

  • OpenLayers知识总结1
  • 在Putty创建php文件
  • 安卓通过网络获取位置的方法
  • 透视B/S架构与C/S架构:构建未来网络应用的智慧选择
  • C27.【C++ Cont】时间、空间限制和STL库的简单了解
  • 跨境电商代购系统独立站深度分享
  • 【信息系统项目管理师-选择真题】2006下半年综合知识答案和详解
  • TVS选型设计
  • Android车机DIY开发之学习篇(六)编译讯为3568开发板安卓
  • 【Rust自学】17.1. Rust的面向对象的编程特性
  • EtherCAT主站IGH-- 20 -- IGH之fsm_pdo_entry.h/c文件解析
  • 【重生之我在学习C语言编译与链接详解】
  • ue5笔记(2)
  • OSCP:发送钓鱼电子邮件执行客户端攻击
  • Java面试题2025-并发编程进阶(线程池和并发容器类)
  • DeepSeek:硅谷AI格局的拐点?
  • 基于STM32的自主行驶无人小车教学
  • ping命令详解Type 8和0 或者Type 3
  • 提升RAG效果:为何 JSON 格式远胜 Markdown?
  • SQL注入漏洞之高阶手法 宽字节注入以及编码解释 以及堆叠注入原理说明