QWebView保存帐号密码功能实现

以下用QT模拟一下常规浏览器对帐号密码的保存

首先是获取QWebview中的表单内容,需要保存的表单中的两个input如下:

1
2
帐号:<input name="username" type="text">
密码:<input name="password" type="password">

在QT中获取这两个input的值的需要使用带JS的方法,首先通过findFirstElement()方法找到目标标签,然后调用js方法获取其值,如下:

1
2
3
//获取帐号密码
qDebug()<<ui->webView->page()->mainFrame()->findFirstElement("#username").evaluateJavaScript("this.value").toString();
qDebug()<<ui->webView->page()->mainFrame()->findFirstElement("#password").evaluateJavaScript("this.value").toString();

具体在何处调用以上方法视应用设计的情况而定,这里我使用了QWebview::loadStarted()信号来触发,因为提交表单时必会触发这个信号。

关于保存本地我们可以使用QT自带的配置文件进行快速的保存,方法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "mainwindow.h"
#include "ui_mainwindow.h"

QString path="config.ini";//定义配置文件路径及名称
QSettings settings(path,QSettings::IniFormat);//初始化配置文件

void MainWindow::saveUserInfo(){

    QString userName = ui->webView->page()->mainFrame()->findFirstElement("#username").evaluateJavaScript("this.value").toString();
    QString passWord = ui->webView->page()->mainFrame()->findFirstElement("#password").evaluateJavaScript("this.value").toString();
    settings.setValue("userName",userName);//保存进配置文件
    settings.setValue("passWord",passWord);

}

接下来是在打开某登录页面时实现自动填写表单,这里我们需要用到QWebView::loadFinished(bool)这个信号,即当加载成功后触发。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(ui->webView,SIGNAL(loadFinished(bool)),this,SLOT(loadFinished(bool)));//绑定信号
    ui->webView->load(QUrl("http://www.beitown.com/index.php"));//加载登录页面
}

void MainWindow::loadFinished(bool result){
    //将配置表中数据调用js写入表单
    ui->webView->page()->mainFrame()->findFirstElement("#username").evaluateJavaScript("this.value='" + settings.value("userName","BeiTown").toString() + "\';" );
    ui->webView->page()->mainFrame()->findFirstElement("#password").evaluateJavaScript("this.value='" + settings.value("passWord","yourPassWord").toString() + "\';" );

}

以上代码中将配置表中数据写入表单的方法也可以换一种写法,原理一样,只是调用了JS来寻找到目标标签:

1
2
view->page()->mainFrame()->evaluateJavaScript("document.getElementById('username').value = 'BeiTown';");
view->page()->mainFrame()->evaluateJavaScript("document.getElementById('password').value = 'yourPassWord';");

以上即为使用QWebView保存Html中某标签信息的方法,当然保存表单信息还可以使用重载QNetworkAccessManager调用QNetworkReply的方法,关于截取Html中Post、Get请求的内容,我会另外开篇。
本文到此,谢谢关注。

BeiTown
2014.08.13

本文链接:QWebView保存帐号密码功能实现

转载声明:BeiTown原创,转载请注明来源:BeiTown's Coder 编码之源,谢谢


Tags: , , , ,

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>