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文件就可以。可编译执行的例子源代码下载地址在这里,没错就是昨天的代码,你需要在两种代码之间用指定的宏切换一下而已。