【Qt pela primeira vez nos rios e lagos】 Gerenciamento de cookies, interação com JavaScript, impressão de páginas, gerenciamento de histórico e outros exemplos funcionais

Yuxian: parceiro de conteúdo CSDN, novo mentor estrela CSDN, 51CTO (Top celebridade + blogueiro especialista), entusiasta de código aberto do github (desenvolvimento secundário de código-fonte go-zero, arquitetura de back-end do jogo https://github.com/Peakchen)

    

 

O Qt WebEngine é um mecanismo de navegador baseado no mecanismo Chromium, que fornece muitas funções para gerenciar páginas da Web, como gerenciamento de cookies, interação com JavaScript, impressão de páginas, gerenciamento de histórico, etc.

uma realização preliminar

O seguinte descreve como implementar essas funções:

1. Gerenciamento de cookies

O Qt WebEngine fornece a classe QWebEngineCookieStore para gerenciar cookies para páginas da Web. Podemos usar a função QWebEngineProfile::defaultProfile() para obter o objeto QWebEngineProfile padrão e usar a função QWebEngineProfile::setPersistentCookiesPolicy() para definir a persistência do cookie. Então, podemos usar a função QWebEngineProfile::cookieStore() para obter o objeto QWebEngineCookieStore e usá-lo para gerenciar cookies. Por exemplo, o código a seguir demonstra como definir a persistência de cookies e adicionar cookies a uma página da 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"));

No código acima, primeiro usamos a função QWebEngineProfile::defaultProfile() para obter o objeto QWebEngineProfile padrão e usamos a função QWebEngineProfile::setPersistentCookiesPolicy() para definir a persistência do cookie. Em seguida, usamos a função QWebEngineProfile::cookieStore() para obter o objeto QWebEngineCookieStore e usamos a função setCookie() para adicionar cookies à página da Web.

2. Interação do JavaScript

O Qt WebEngine fornece a função QWebEnginePage::runJavaScript() para interagir com o código JavaScript da página da Web. Podemos usar essa função para executar o código JavaScript e obter o valor de retorno do código JavaScript no código C++. Por exemplo, o código a seguir demonstra como executar o código JavaScript e obter o valor de retorno do código JavaScript no código C++:

QWebEngineView view;
view.show();

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

No código acima, primeiro criamos um objeto QWebEngineView e o exibimos usando a função show(). Em seguida, usamos a função QWebEngineView::page() para obter o objeto QWebEnginePage e usamos a função QWebEnginePage::runJavaScript() para executar o código JavaScript. Por fim, usamos a função toString() para converter o valor de retorno em uma string e enviá-la ao console.

3. Impressão de página

O Qt WebEngine fornece a função QWebEnginePage::print() para imprimir páginas da Web. Podemos usar esta função para imprimir uma página da web em uma impressora ou em um arquivo PDF. Por exemplo, o código a seguir demonstra como imprimir uma página da Web em um arquivo 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();
    }
});

No código acima, primeiro criamos um objeto QWebEngineView e o exibimos usando a função show(). Em seguida, usamos a função QWebEngineView::page() para obter o objeto QWebEnginePage e usamos a função QWebEnginePage::printToPdf() para imprimir a página da Web em um arquivo PDF. Finalmente, usamos expressões lambda para processar os arquivos PDF gerados.

4. Gerenciamento de histórico

O Qt WebEngine fornece a classe QWebEngineHistory para gerenciar o histórico de navegação na Web. Podemos usar a função QWebEnginePage::history() para obter o objeto QWebEngineHistory e usá-lo para gerenciar o histórico de navegação na Web. Por exemplo, o código a seguir demonstra como voltar e avançar no histórico de navegação na web:

QWebEngineView view;
view.show();

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

No código acima, primeiro criamos um objeto QWebEngineView e o exibimos usando a função show(). Em seguida, usamos a função QWebEngineView::page() para obter o objeto QWebEnginePage e usamos a função QWebEnginePage::history() para obter o objeto QWebEngineHistory. Por fim, usamos a função back() e a função forward() para voltar e avançar no histórico de navegação na web.

Duas implementações suplementares

Suplemento: O gerenciamento de cookies mencionado acima, interação JavaScript, impressão de página, gerenciamento de histórico e outras funções podem ser implementadas no Qt WebEngine por meio do mecanismo de sinal e slot. A seguir estão descrições detalhadas e exemplos de código:

Além de usar a classe QWebEngineCookieStore para gerenciamento de cookies, o Qt WebEngine também fornece o sinal QWebEngineProfile::downloadRequested() e o sinal QWebEngineProfile::profileCreated(), que podem ser usados ​​para interceptar e modificar cookies.

Por exemplo, o código a seguir demonstra como interceptar cookies usando o sinal QWebEngineProfile::downloadRequested():

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

No código acima, usamos a função QWebEngineProfile::defaultProfile() para obter o objeto QWebEngineProfile padrão e usamos a função QObject::connect() para conectar o sinal QWebEngineProfile::downloadRequested(). Quando a página da web solicita o download, esse sinal é acionado e um objeto QWebEngineDownloadItem é passado como parâmetro, que contém as informações da solicitação de download, incluindo o Cookie.

Além de usar a função QWebEnginePage::runJavaScript() para interação com JavaScript, o Qt WebEngine também fornece o sinal QWebEnginePage::javaScriptConsoleMessage() e o sinal QWebEnginePage::javaScriptPrompt(), que podem ser usados ​​para processar a saída e entrada de JavaScript código em código C++.

Por exemplo, o código a seguir demonstra como usar o sinal QWebEnginePage::javaScriptConsoleMessage() para gerar a saída do 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!')");

No código acima, usamos a classe QWebEngineView para criar uma página da Web e usamos a função QWebEngineView::page() para obter o objeto QWebEnginePage. Em seguida, usamos a função QObject::connect() para conectar ao sinal QWebEnginePage::javaScriptConsoleMessage(), que é acionado quando o código JavaScript é enviado para o console, passando a mensagem de saída, o número da linha e o ID da fonte como parâmetros. Por fim, executamos o código JavaScript usando a função QWebEnginePage::runJavaScript(), que envia uma mensagem para o console.

Além de usar a função QWebEnginePage::print() para impressão de página, o Qt WebEngine também fornece o sinal QWebEnginePage::printRequested() e o sinal QWebEnginePage::pdfPrintingFinished(), que podem ser usados ​​para processar a saída e os resultados da página impressão em código C++.

Por exemplo, o código a seguir demonstra como imprimir uma página da Web em um arquivo PDF usando o sinal QWebEnginePage::printRequested() e o sinal 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"));

No código acima, usamos a classe QWebEngineView para criar uma página da Web e usamos a função QWebEngineView::page() para obter o objeto QWebEnginePage. Em seguida, usamos a função QObject::connect() para conectar ao sinal QWebEnginePage::printRequested(), que é acionado quando a página da Web solicita a impressão e passamos um objeto QWebEnginePdfPrinter como parâmetro. Podemos usar este objeto para definir o nome do arquivo de saída e realizar operações de impressão. Por fim, usamos a função QObject::connect() para conectar ao sinal QWebEnginePage::pdfPrintingFinished(), que é acionado quando a impressão é concluída, passando os dados binários do arquivo PDF resultante como um argumento. Na função de processamento deste sinal, salvamos o arquivo PDF gerado localmente.

Além de usar a classe QWebEngineHistory para gerenciamento de histórico, o Qt WebEngine também fornece o sinal QWebEnginePage::urlChanged() e o sinal QWebEnginePage::titleChanged(), que podem ser usados ​​para processar alterações no histórico de navegação da Web em código C++.

Por exemplo, o código a seguir demonstra como usar os sinais QWebEnginePage::urlChanged() e QWebEnginePage::titleChanged() para monitorar alterações no histórico de navegação na 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"));

No código acima, usamos a classe QWebEngineView para criar uma página da Web e usamos a função QWebEngineView::page() para obter o objeto QWebEnginePage. Em seguida, usamos a função QObject::connect() para conectar o sinal QWebEnginePage::urlChanged() e o sinal QWebEnginePage::titleChanged(), que são acionados quando a URL ou título do histórico de navegação na web muda. Geramos o URL ou título alterado na função do manipulador desses sinais. Por fim, usamos a função QWebEngineView::load() para carregar a página da Web, que aciona os sinais QWebEnginePage::urlChanged() e QWebEnginePage::titleChanged().

O Qt WebEngine fornece uma variedade de funções para gerenciar páginas da Web, incluindo gerenciamento de cookies, interação com JavaScript, impressão de páginas, gerenciamento de histórico, etc. Os desenvolvedores podem escolher métodos e APIs apropriados para implementar essas funções de acordo com suas próprias necessidades. Ao mesmo tempo, por meio do mecanismo de sinal e slot, os desenvolvedores também podem lidar com eventos e alterações de páginas da Web em código C++.

Acho que você gosta

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