Qt利用JavaScript访问网页元素,百度博客下载例子
Qt利用JavaScript访问网页元素(百度博客下载例子)
本站所有文章由本站和原作者保留一切权力,仅在保留本版权信息、原文链接、原文作者的情况下允许转载,转载请勿删改原文内容, 并不得用于商业用途。 谢谢合作。
原文链接:Qt利用JavaScript访问网页元素(百度博客下载例子)
昨天的文章Qt利用DOM API访问网页元素介绍了怎样使用QtWebKit中的DOM支持来实现读取百度博客中的博客标题和上下文链接。要实现网页处理的功能,QtWebKit还提供了更灵活的方法,就是利用JavaScript来处理网页,使用JavaScript能更方便的扩展你的应用,首先它不需要重新编译程序,在网页内容变化的时候,修改JavaScript文件就可以,其次也很容易实现插件话,比如我读取百度博客可以使用baidu.js来实现,要支持新浪的博客,只需另外增加一个sohu.js文件就可以。从代码使用上JavaScript也有一定优势,它能直接使用HTML里的JavaScript定义的变量,如果要用Qt代码几乎是不可能的。
要在QtWebKit中使用JavaScript,核心的一个函数就是evaluateJavaScript(QString),参数是要执行的JavaScript语句。有两个类定义了该函数分别是QWebElement和QWebFrame,也就是说可以对HTML文档中的一个节点或者整个文档调用evaluateJavaScript()。evaluateJavaScript()可以执行更改文档节点中的内容,比如修改背景色,图表数据等。evaluateJavaScript()还能返回数据,它执行的最后一条JavaScript语句的结果输出传给Qt代码,可以是一个字符串,也可以是一个XML对象,注意它的返回类型是QVariant。
我们还来看一个我要加载的baidu.js文件,里面用简单的JavaScript DOM读取博客的主体,标题和上下文链接。
function getBlog(){
var blog_text=document.getElementById(“blog_text”);
return blog_text.innerHTML;
}
function getTitle(){
var blog=document.getElementById(“m_blog”);
var list=blog.getElementsByClassName(“tit”);
return list[0].innerHTML;
}
function older_href(){
return “http://hi.baidu.com”+pre[3];
}
function newer_href(){
return “http://hi.baidu.com”+post[3];
}
为了使用这里的JavaScript函数,可以使用如下Qt代码加载
QFile file;
file.setFileName(“baidu.js”);
file.open(QIODevice::ReadOnly);
QString jscript = file.readAll();
file.close();
mainframe->evaluateJavaScript(jscript);
在真正要读取博客中的内容的时候,去调用对应的JavaScript函数就可以,代码如下。下面的代码,我们使用了evaluateJavaScript()的返回值。
QString js_str,js_return;
js_str=QString(“getTitle();”);
js_return=mainframe->evaluateJavaScript(js_str).toString();
title->setText(js_return);
js_str=QString(“older_href();”);
js_return=mainframe->evaluateJavaScript(js_str).toString();
prev->setText(js_return);
js_str=QString(“newer_href();”);
js_return=mainframe->evaluateJavaScript(js_str).toString();
next->setText(js_return);
从上面的结构来看,我们很容易把下载百度博客的程序扩展到其他空间的博客上。只要实现一个相应的.js文件就可以。可编译执行的例子源代码下载地址在这里,没错就是昨天的代码,你需要在两种代码之间用指定的宏切换一下而已。
- 上一篇 »响应式网页设计简单入门
- 下一篇 »linux环境下Qt不用驱动,直接连接MySQL