zoukankan      html  css  js  c++  java
  • Qt利用JavaScript访问网页元素(百度博客下载例子)

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

  • 相关阅读:
    【转】 Android代码混淆之混淆规则
    【转】java虚拟机机制总结
    【转】图解 HTTP协议/IIS 原理及ASP.NET运行机制浅析
    【转】Android 消息机制
    Android-eclipse-NDK&JNI
    【转】大型网站系统架构的演化
    【转】Android开发必知--WebView加载html5实现炫酷引导页面
    【转】Java虚拟机详解----GC算法和种类
    网页中缩略图的意义
    网页开关灯效果
  • 原文地址:https://www.cnblogs.com/lexus/p/2370580.html
Copyright © 2011-2022 走看看