QWebEngineView浏览器如何获取全部cookie

本文总结了使用QWebEngineView在开发过程中获取全部cookie的尝试,包括JavaScript获取的限制、QWebEngineHttpRequest的问题以及最终通过信号槽成功获取所有cookie的方法。在多次尝试中,作者遇到了浏览器对cookie获取的限制以及WebEngineView对请求头的修改等问题,最后通过特定的方式来实现需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

总结记录下用QWebEngineView开浏览器过程中遇到的一些坑

第一次尝试:用JavaScript获取cookie,发现是可以获取cookie的,但是获取不全。代码如下:

static QString g_cookie = "";
void writeCookie(QString strText)
{
    QString path = QCoreApplication::applicationDirPath();
    path.append("/cookies/cookie.txt");

    //创建文件对象
    QFile file(path);
    //打开文件,只写方式
    bool error = file.open(QIODevice::WriteOnly | QIODevice::Truncate);
    if(error)
    {
        QByteArray data = strText.toLatin1();
        file.write(data);
        file.close();
    }
}

void MyWebEngineView::getCookieByJavaScript()
{
    this->page()->runJavaScript("function GetCookie(){return document.cookie}");
    this->page()->runJavaScript("GetCookie();",[](const QVariant& v){

        QString strCookie = "";
        strCookie = v.toString();
        g_cookie  = strCookie;
        qDebug()<<g_cookie;
        writeCookie(strCookie);
    });
}

QString MyWebEngineView::readCookie()
{
    QString path = QCoreApplication::applicationDirPath();
    path.append("/cookies/cookie.txt");
    qDebug()<<path;

    QString strCookie = "";
    QFile file(path);
    bool error = file.open(QIODevice::ReadWrite);
    if(error)
    {
        QByteArray data = file.readAll();
        strCookie.append(data);

        qDebug()<<"-------------- readCookie start ---------------";
        qDebug()<<strCookie.size()<<strCookie;
        qDebug()<<"-------------- readCookie end ---------------";

        file.close();
    }

    return strCookie;
}

第二次尝试:重写

QWebEngineUrlRequestInterceptor࿰
在C++中,特别是使用Qt框架的QWebEngineView组件,如果你需要获取网页中的token(通常用于身份验证),你需要通过JavaScript来实现这个功能。因为QWebEngineView提供了一个接口来与网页内容进行交互。 首先,你需要设置QWebEngineViewjavaScriptConsoleMessageReceived信号处理器,以便在浏览器控制台有消息打印出来时捕获它。这可以通过以下步骤完成: ```cpp QWebEngineView* webView = new QWebEngineView(parent); webView->load(QUrl("http://yourwebsite.com")); // 加载需要获取token的页面 QObject::connect(webView, &QWebEngineView::javaScriptConsoleMessageReceived, this, [webView](const QString& message) { if (message.contains("token")) { // 检查消息是否包含"token" int startIndex = message.indexOf("token") + len("token"); QString token = message.mid(startIndex); // 提取token部分 // 这里处理token,例如存储或显示给用户 } }); ``` 然后,在JavaScript方面,可以在前端代码中,比如通过AJAX请求或者document.cookie等方式获取token,再将其发送到后台。你可以使用`evalJS()`或`runJavaScript()`方法来运行前端脚本: ```cpp QWebEngineScript script; script.setSourceCode(QStringLiteral("var token = document.getElementById('token').innerText;")); webView->executeScript(script, result); if (!result.isEmpty()) { QString tokenFromJs = result.toString(); // 使用提取的token } ``` 请注意,直接读取用户的敏感信息,如token,应在服务器端处理,并采取安全措施保护数据传输。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值