假点击QNetworkAccessManager登录页面上的按钮

Fake click on a Button at a login Page with QNetworkAccessManager

本文关键字:按钮 登录 QNetworkAccessManager      更新时间:2023-10-16

我想使用QNetworkAccessManager登录页面并保存比cookie,以从您必须登录的页面获取源代码。使用我的代码,我无法填充页面上的输入,但我无法按顺序操作按钮。谁能帮我?

在 .pro 文件中:QT += 网络

这是我的代码:

文件.h:

#include <QNetworkAccessManager>
#include <QUrl>
#include <QByteArray>
#include <QString>
#include <QEventLoop>
#include <QNetworkCookieJar>
#include <QNetworkProxy>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QUrlQuery>
#include <iostream>
#include <QObject>
#include <QCoreApplication>
class object : public QObject
{
    Q_OBJECT
public:
    QUrlQuery postData;
    QNetworkAccessManager *networkManager;
    QUrl serviceUrl;
    QNetworkCookieJar *cookies;
    QNetworkRequest request;
    object(QObject *parent = 0);
    ~object();
    void load();
public slots:
    void finished(QNetworkReply* a);
};

文件.cpp:

#include "networkaccessmanager.h"

object::object(QObject *parent)
    :  QObject(parent)
{
    networkManager = new QNetworkAccessManager();
    serviceUrl = QUrl("https://*/user/login?redirect_to=");
    cookies = networkManager->cookieJar();
    connect(networkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(finished(QNetworkReply*)) );
}
object::~object()
{
}
void object::load()
{
    postData.addQueryItem("user_name", "use");
    postData.addQueryItem("password", "pw");
    request.setUrl(serviceUrl);
    request.setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded");
    networkManager->post(request, postData.toString(QUrl::FullyEncoded).toUtf8());
}
void object::finished(QNetworkReply *a)
{
    std::cout << a->readAll().toStdString() << std::endl;
    QCoreApplication::exit();
}

主.cpp:

#include <QCoreApplication>
#include <iostream>
#include "networkaccessmanager.h"
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    object obj;
    obj.load();
    return a.exec();
}

我使用了qwebview,我实际上不想使用并使用了这个函数:

int WebView::clickButton(QString inputName /* input[type=submit] */ )
{
    QWebElement button = this->page()->mainFrame()->documentElement().findFirst(inputName);
    if (button.isNull()) {
        std::cout << "33[2Kr" << " => Error: Button konnte nicht gefunden werden." << std::endl;
        return 1;
    }
    button.evaluateJavaScript( "this.click()" );
    return 0;
}