以下用QT模拟一下常规浏览器对帐号密码的保存
首先是获取QWebview中的表单内容,需要保存的表单中的两个input如下:
在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