Qt 5.5.1을 사용하고 있습니다. QWebview를 사용하여 작은 브라우저를 만듭니다.
웹 페이지를 열고 버튼을 누르면, 내가 로그인 할 때 URL이 변경되지 않도록 로그인 페이지가있는 웹 사이트에서 데이터를 가져오고 싶으므로 QnetworkAccessManager에서 메소드를 사용하는 것과 같은 웹 사이트가 있습니다. 데이터를 가져 오기 위해 PHP에 메소드를 게시하지 않았습니다.
예를 들어 www.login.com에 로그인 할 때 로그인 데이터가 동일한 링크에 표시됩니다
이 문제를 해결할 수있는 아이디어가 있거나 웹 사이트에서 현재 데이터를 가져올 수있는 경우 QWebview
참고 내가 로그인 데이터가 소스 코드에 표시 파이어 폭스에서 소스보기 코드를 눌러하여에서 데이터를 웹 사이트에 로그인하여 얻을
이것은 내가 뭘하려
Qt를 사용하여 QWebView에서 웹 사이트 콘텐츠 가져 오기 5.5.1
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow) {
ui->setupUi(this);
ui->webView->load(QUrl("https://www.login.com")); // load page that have user name and password field
QWebPage *page = ui->webView->page(); // get the current page
manager = page->networkAccessManager(); // get the access manager from this page
}
MainWindow::~MainWindow() {
delete ui;
}
// get button
void MainWindow::on_pushButton_clicked() {
reply = manager->get(QNetworkRequest(QUrl("https://www.login.com"))); // make get now after login
connect(reply, SIGNAL(readyRead()),this,SLOT(readyRead()));
connect(reply, SIGNAL(finished()),this, SLOT(finish()));
}
void MainWindow::readyRead() {
QString str = QString::fromUtf8(reply->readAll()).trimmed(); // read the data
ui->plainTextEdit->appendPlainText(str);
}
하지만, 첫 번째 페이지의 데이터를 가져옵니다. e 로그인없이. 로그인 후 페이지 콘텐츠를 가져오고 싶습니다. 제게해야 할 일에 대한 힌트를주세요.
갱신
는 내가 그것의 이름을 가지고 HTML 코드의 부분이 로그인없이 텍스트 입력 이름을 가져 그 결과가 여기에 포스트를 만들기 위해 QUrlQuery를 사용하여 첫 번째 페이지를 파이어 폭스에서 페이지 소스 코드를했다보기
<label class="label-off" for="dwfrm_ordersignup_orderNo">Numéro de la commande</label> <input class="textinput required" id="anyname" type="text" name="UserName" value="" maxlength="2147483647" placeholder="* UserName" data-missing-error="Saisis ton numéro de commande. " data-parse-error="Ce contenu est invalide" data-range-error="Ce contenu est trop long ou trop court" required="required" />
이며 다른 필드에는 동일한 코드가 있습니다.
코드 나는
manager = new QNetworkAccessManager(this);
QUrlQuery query;
query.addQueryItem("UserName", "AAAA");
query.addQueryItem("Password", "BBB");
reply = manager->post(QNetworkRequest(QUrl(ui->lineEdit->text().trimmed())), query.toString().toUtf8());
connect(reply,&QNetworkReply::downloadProgress,this,&MainWindow::progress);
connect(reply,SIGNAL(readyRead()),this,SLOT(readyRead()));
connect(reply, SIGNAL(finished()), this,SLOT(finish()));
은 내가 만든 그것이 내가 다른 접근 방식을 사용하는 경우에만 HTML 페이지
에게 등, 당신은 로그인 페이지를 사용자 환경에 코드를 적용 분석 할 필요가 있음을 유의하시기 바랍니다 간단한 예를 참조
webview->page()->mainFrame()->toHtml()
를 사용할 수있는 충분한 경우 아마도 POST 메소드를 서버에 보내려면 로그인 페이지를 분석하고 텍스트 입력의 이름을보고이를 'QUrlQuery'의 키로 전달하여 해당 값 (일반적으로 이름과 비밀번호)을 전달해야합니다. Qt로 post 메서드를 수행하는 방법의 예가 게시되었습니다 (http://stackoverflow.com/a/7445752/2014561). –
나는 무엇을 시도했는지에 대한 질문을 업데이트한다. –
내 대답을 참조하십시오. –