【Qt por primera vez en los ríos y lagos】Gestión de cookies, interacción con JavaScript, impresión de páginas, gestión de historial y otros ejemplos funcionales

Yuxian: socio de contenido de CSDN, nuevo mentor estrella de CSDN, 51CTO (principal celebridad + blogger experto), entusiasta del código abierto de github (desarrollo secundario del código fuente de cero, arquitectura de back-end del juego https://github.com/Peakchen)

    

 

Qt WebEngine es un motor de navegación basado en el motor Chromium, que brinda muchas funciones para administrar páginas web, como administración de cookies, interacción con JavaScript, impresión de páginas, administración de historial, etc.

una realización preliminar

A continuación se describe cómo implementar estas funciones:

1. Gestión de cookies

Qt WebEngine proporciona la clase QWebEngineCookieStore para administrar cookies para páginas web. Podemos usar la función QWebEngineProfile::defaultProfile() para obtener el objeto QWebEngineProfile predeterminado y usar la función QWebEngineProfile::setPersistentCookiesPolicy() para establecer la persistencia de la cookie. Luego, podemos usar la función QWebEngineProfile::cookieStore() para obtener el objeto QWebEngineCookieStore y usarlo para administrar las cookies. Por ejemplo, el siguiente código muestra cómo configurar la persistencia de cookies y agregar cookies a una página web:

QWebEngineProfile* profile = QWebEngineProfile::defaultProfile();
profile->setPersistentCookiesPolicy(QWebEngineProfile::AllowPersistentCookies);

QWebEngineCookieStore* cookieStore = profile->cookieStore();
QNetworkCookie cookie("name", "value");
cookie.setDomain("example.com");
cookie.setPath("/");
cookieStore->setCookie(cookie, QUrl("http://example.com"));

En el código anterior, primero usamos la función QWebEngineProfile::defaultProfile() para obtener el objeto QWebEngineProfile predeterminado y usamos la función QWebEngineProfile::setPersistentCookiesPolicy() para establecer la persistencia de la cookie. Luego, usamos la función QWebEngineProfile::cookieStore() para obtener el objeto QWebEngineCookieStore y usamos la función setCookie() para agregar cookies a la página web.

2. Interacción JavaScript

Qt WebEngine proporciona la función QWebEnginePage::runJavaScript() para interactuar con el código JavaScript de la página web. Podemos usar esta función para ejecutar código JavaScript y obtener el valor de retorno del código JavaScript en código C++. Por ejemplo, el siguiente código demuestra cómo ejecutar código JavaScript y obtener el valor de retorno del código JavaScript en código C++:

QWebEngineView view;
view.show();

QWebEnginePage* page = view.page();
QVariant result = page->runJavaScript("document.title");
qDebug() << "Page title:" << result.toString();

En el código anterior, primero creamos un objeto QWebEngineView y lo mostramos usando la función show(). Luego, usamos la función QWebEngineView::page() para obtener el objeto QWebEnginePage y usamos la función QWebEnginePage::runJavaScript() para ejecutar el código JavaScript. Finalmente, usamos la función toString() para convertir el valor devuelto en una cadena y enviarlo a la consola.

3. Impresión de páginas

Qt WebEngine proporciona la función QWebEnginePage::print() para imprimir páginas web. Podemos usar esta función para imprimir una página web en una impresora o en un archivo PDF. Por ejemplo, el siguiente código muestra cómo imprimir una página web en un archivo PDF:

QWebEngineView view;
view.show();

QWebEnginePage* page = view.page();
page->printToPdf("page.pdf", [](const QByteArray& pdf){
    QFile file("page.pdf");
    if(file.open(QIODevice::WriteOnly))
    {
        file.write(pdf);
        file.close();
    }
});

En el código anterior, primero creamos un objeto QWebEngineView y lo mostramos usando la función show(). Luego, usamos la función QWebEngineView::page() para obtener el objeto QWebEnginePage y usamos la función QWebEnginePage::printToPdf() para imprimir la página web en un archivo PDF. Finalmente, usamos expresiones lambda para procesar los archivos PDF generados.

4. Gestión del historial

Qt WebEngine proporciona la clase QWebEngineHistory para administrar el historial de navegación web. Podemos usar la función QWebEnginePage::history() para obtener el objeto QWebEngineHistory y usarlo para administrar el historial de navegación web. Por ejemplo, el siguiente código muestra cómo retroceder y avanzar en el historial de navegación web:

QWebEngineView view;
view.show();

QWebEnginePage* page = view.page();
QWebEngineHistory* history = page->history();
history->back();
history->forward();

En el código anterior, primero creamos un objeto QWebEngineView y lo mostramos usando la función show(). Luego, usamos la función QWebEngineView::page() para obtener el objeto QWebEnginePage y usamos la función QWebEnginePage::history() para obtener el objeto QWebEngineHistory. Finalmente, usamos la función back() y la función forward() para retroceder y avanzar en el historial de navegación web.

Dos implementaciones complementarias

Suplemento: La gestión de cookies mencionada anteriormente, la interacción de JavaScript, la impresión de páginas, la gestión del historial y otras funciones pueden implementarse en Qt WebEngine a través del mecanismo de señal y ranura. Las siguientes son descripciones detalladas y ejemplos de código:

Además de usar la clase QWebEngineCookieStore para la administración de cookies, Qt WebEngine también proporciona la señal QWebEngineProfile::downloadRequested() y la señal QWebEngineProfile::profileCreated(), que se pueden usar para interceptar y modificar cookies.

Por ejemplo, el siguiente código demuestra cómo interceptar cookies usando la señal QWebEngineProfile::downloadRequested():

QWebEngineProfile* profile = QWebEngineProfile::defaultProfile();
QObject::connect(profile, &QWebEngineProfile::downloadRequested,
                 [=](const QWebEngineDownloadItem& download){
    const QList<QNetworkCookie>& cookies = download.cookies();
    // 处理Cookie
});

En el código anterior, usamos la función QWebEngineProfile::defaultProfile() para obtener el objeto QWebEngineProfile predeterminado y usamos la función QObject::connect() para conectar la señal QWebEngineProfile::downloadRequested(). Cuando la página web solicita una descarga, se activa esta señal y se pasa como parámetro un objeto QWebEngineDownloadItem, que contiene la información de la solicitud de descarga, incluida la Cookie.

Además de usar la función QWebEnginePage::runJavaScript() para la interacción con JavaScript, Qt WebEngine también proporciona la señal QWebEnginePage::javaScriptConsoleMessage() y la señal QWebEnginePage::javaScriptPrompt(), que se pueden usar para procesar la salida y la entrada de JavaScript. código en código C++.

Por ejemplo, el siguiente código demuestra cómo usar la señal QWebEnginePage::javaScriptConsoleMessage() para generar la salida del código JavaScript:

QWebEngineView view;
view.show();

QWebEnginePage* page = view.page();
QObject::connect(page, &QWebEnginePage::javaScriptConsoleMessage,
                 [=](const QString& message, int lineNumber, const QString& sourceID){
    qDebug() << "JavaScript output:" << message << "at line" << lineNumber << "in" << sourceID;
});

page->runJavaScript("console.log('Hello from JavaScript!')");

En el código anterior, usamos la clase QWebEngineView para crear una página web y usamos la función QWebEngineView::page() para obtener el objeto QWebEnginePage. Luego, usamos la función QObject::connect() para conectarnos a la señal QWebEnginePage::javaScriptConsoleMessage(), que se activa cuando el código JavaScript se envía a la consola, pasando el mensaje de salida, el número de línea y el ID de la fuente como parámetros. Finalmente, ejecutamos código JavaScript utilizando la función QWebEnginePage::runJavaScript(), que envía un mensaje a la consola.

Además de usar la función QWebEnginePage::print() para la impresión de páginas, Qt WebEngine también proporciona la señal QWebEnginePage::printRequested() y la señal QWebEnginePage::pdfPrintingFinished(), que se pueden usar para procesar la salida y los resultados de la página. imprimiendo en código C++.

Por ejemplo, el siguiente código demuestra cómo imprimir una página web en un archivo PDF utilizando la señal QWebEnginePage::printRequested() y la señal QWebEnginePage::pdfPrintingFinished():

QWebEngineView view;
view.show();

QWebEnginePage* page = view.page();
QObject::connect(page, &QWebEnginePage::printRequested, [=](QWebEnginePdfPrinter* printer){
    printer->setOutputFileName("page.pdf");
    printer->printToPdf();
});
QObject::connect(page, &QWebEnginePage::pdfPrintingFinished, [=](const QByteArray& pdf){
    QFile file("page.pdf");
    if(file.open(QIODevice::WriteOnly))
    {
        file.write(pdf);
        file.close();
    }
});

view.load(QUrl("http://www.example.com"));

En el código anterior, usamos la clase QWebEngineView para crear una página web y usamos la función QWebEngineView::page() para obtener el objeto QWebEnginePage. Luego, usamos la función QObject::connect() para conectarnos a la señal QWebEnginePage::printRequested(), que se activa cuando la página web solicita la impresión, y pasamos un objeto QWebEnginePdfPrinter como parámetro. Podemos usar este objeto para establecer el nombre del archivo de salida y realizar operaciones de impresión. Finalmente, usamos la función QObject::connect() para conectarnos a la señal QWebEnginePage::pdfPrintingFinished(), que se activa cuando se completa la impresión, pasando los datos binarios del archivo PDF resultante como argumento. En la función de procesamiento de esta señal, guardamos localmente el archivo PDF generado.

Además de usar la clase QWebEngineHistory para la administración del historial, Qt WebEngine también proporciona la señal QWebEnginePage::urlChanged() y la señal QWebEnginePage::titleChanged(), que se pueden usar para procesar cambios en el historial de navegación web en código C++.

Por ejemplo, el siguiente código demuestra cómo usar las señales QWebEnginePage::urlChanged() y QWebEnginePage::titleChanged() para monitorear cambios en el historial de navegación web:

QWebEngineView view;
view.show();

QWebEnginePage* page = view.page();
QObject::connect(page, &QWebEnginePage::urlChanged, [=](const QUrl& url){
    qDebug() << "Page URL changed:" << url;
});
QObject::connect(page, &QWebEnginePage::titleChanged, [=](const QString& title){
    qDebug() << "Page title changed:" << title;
});

view.load(QUrl("http://www.example.com"));

En el código anterior, usamos la clase QWebEngineView para crear una página web y usamos la función QWebEngineView::page() para obtener el objeto QWebEnginePage. Luego, usamos la función QObject::connect() para conectar la señal QWebEnginePage::urlChanged() y la señal QWebEnginePage::titleChanged(), que se activan cuando cambia la URL o el título del historial de navegación web. Enviamos la URL o el título modificados en la función de controlador de estas señales. Finalmente, usamos la función QWebEngineView::load() para cargar la página web, lo que activa las señales QWebEnginePage::urlChanged() y QWebEnginePage::titleChanged().

Qt WebEngine proporciona una gran cantidad de funciones para administrar páginas web, incluida la administración de cookies, la interacción de JavaScript, la impresión de páginas, la administración del historial, etc. Los desarrolladores pueden elegir métodos y API apropiados para implementar estas funciones según sus propias necesidades. Al mismo tiempo, a través del mecanismo de señal y ranura, los desarrolladores también pueden manejar eventos y cambios de páginas web en código C++.

Supongo que te gusta

Origin blog.csdn.net/feng1790291543/article/details/131805351
Recomendado
Clasificación