`

三种获取ajax加载的动态内容的方法

 
阅读更多
有些网站的比较重要的内容可能会采用javascript动态加载内容,防止采集,获取其中的信息,但是我们在采集的时候还需要获取到这些内容,

下面就介绍三种可以获取到javascript内容的方法,三种方式的原理其实是一样的,就是通过浏览器引擎来解析javascript。

1)、利用WebBrowser控件

这个方式大家也都知道,也就不多说了,说几个比较重要的地方。首先,我要在DocumentCompleted事件里面完成内容获取的工作,因为该控件

是在文档加载完成后触发的。其次,这个事件有个问题,就是说如果在页面中有iframe框架之类的,如果这个iframe加载完成也会触发这个事件,所以我们要做个判断


if (wb.ReadyState == WebBrowserReadyState.Complete && e.Url.ToString() == wb.Url.ToString())
 

 这个判断就是说在控件所有内容加载完并且是本页面加载完,而不是某个iframe加载完。然后就可以通过


wb.Document.Body.InnerHtml;
 

 来获取内容啦!



2)利用phantomjs这个开源项目

这个项目的地址:http://phantomjs.org/ 。这个项目说的通俗点就是一个无界面的基于webkit内核的浏览器,既然是浏览器当然就能获取

javascript加载的内容。至于这个开源项目更多的细节还需要大家自己来阅读这个文档,里面写的很全面,也很易懂!

我先简单的介绍下在win7下怎么用这个项目

1、下载windows版本,地址http://phantomjs.org/download.html,现在的版本是1.9.1

2、下载完,解压缩,放到某个文件夹下

3、配置环境变量,把这个文件夹的根目录配置到环境变量中。

下面我们看怎么用C#来调用,这里用到Process类,具体看代码:
Process p = new Process();
            //启用命令行
            p.StartInfo.FileName = @"cmd.exe";
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardInput = true;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.RedirectStandardError = true;
            p.StartInfo.CreateNoWindow = true;
            p.Start();
            //输入各种命令
            p.StandardInput.WriteLine(@"cd D:\Program Files\phantomjs\examples");
            p.StandardInput.WriteLine(@"d:");
            p.StandardInput.WriteLine("phantomjs --output-encoding=gbk test.js www.xxxx.com");
            p.StandardInput.Close();
            p.StandardInput.Dispose();
            //获取结果
            string strRst = p.StandardOutput.ReadToEnd();
            p.Close();
            Console.WriteLine(strRst);
 

 上面代码中用到了一个test.js的文件,这个文件的写法需要参考一下phantomjs的api或者它自带的例子,很简单,比较好理解。

ttest。js的代码

 
var page = require('webpage').create(),
            system = require('system'),
            url;
url = system.args[1];
page.open(url, function (status) {
    var title = page.evaluate(function () {
        return document.getElementById('contact').innerHTML;
        //return document.title;
    });
    console.log('Page title is ' + title);
    //必须要退出,否则在c#调用的时候会卡死
    phantom.exit();
});
 

 

3)利用phantomjs的一个包装类库

这个类库很全面,有基于各种浏览的驱动,当然也包括phantomjs,我们就用PhantomJSDriver类来操作。当然这个类库信息很多,还需要大家

自己来看,我也是看了一点点,没有看的太详细!当然需要先下载类库,地址:http://docs.seleniumhq.org/download/,下载完添加引用,

(发现貌似只用3.5和4.0版本的,老的版本中是否支持2.0),api文档地址:http://selenium.googlecode.com/git/docs/api/dotnet/index.html,下面看调用,很简单,几行代码就可以搞定!
 
PhantomJSDriver driver = driver = new PhantomJSDriver();
driver.Url = "url";
string pagesource = driver.PageSource;
driver.Quit();
driver.Dispose();
 

 

分享到:
评论

相关推荐

    chrome扩展插件获取ajax请求记录

    在IT领域,尤其是在Web开发中,Ajax(Asynchronous JavaScript and XML)是一种常用的技术,它使得网页可以在不重新加载整个页面的情况下与服务器交换数据并更新部分网页内容。这极大地提升了用户体验,因为用户不再...

    ajax的动态加载

    例如,使用jQuery实现一个简单的Ajax加载: ```javascript $("#loadButton").click(function() { $.ajax({ url: "ajax_data.html", // 服务器端数据源 type: "GET", success: function(data) { $("#...

    Echarts通过Ajax实现动态数据加载

    ### Echarts通过Ajax实现动态数据加载 #### 一、引言 在现代Web开发中,数据可视化是一项重要的技能。Echarts作为一款强大的JavaScript图表库,因其丰富的图表类型、灵活的配置选项以及良好的交互性而备受开发者...

    ajax,servlet动态加载dtree

    在本项目"ajax,servlet动态加载dtree"中,我们看到的是利用Ajax技术和Servlet实现dtree(一种树形菜单控件)的动态加载。这个项目可能是一个文件管理系统或者目录浏览应用,其中dtree用于展示文件或目录结构,而...

    Echarts教程之通过Ajax实现动态加载折线图的方法

    在ECharts中通过Ajax实现动态加载折线图的方法,主要涉及到前端JavaScript编程,以及后端数据服务的配合。 在本教程中,我们将学习如何利用ECharts结合Ajax技术,实现一个动态加载折线图的数据可视化。具体知识点...

    ajax动态加载无限级树的复选框

    在IT领域,Ajax(Asynchronous JavaScript and XML)技术被广泛应用于网页动态加载数据,它可以实现页面无刷新更新,提升用户体验。本话题聚焦于利用Ajax动态加载无限级树结构的复选框,这是一个常见于文件管理、...

    AJAX从服务端获取数据的三种方法

    在本例中,我们将关注三种从服务器获取数据的方法,并以一个实际场景为例,即通过用户在第一个下拉列表(select)的选择,动态加载第二个下拉列表的内容。 **方法一:从服务端获取XML格式的数据** 此方法是最常见...

    AjaxTree源码,AJAX动态获取节点的子节点

    AjaxTree是一款基于AJAX技术实现的树形视图控件,其核心特性在于能够动态地通过服务器请求获取节点的子节点数据,从而避免一次性加载大量数据导致页面性能下降的问题。这一设计模式在网页应用中非常常见,尤其是在...

    Ajax动态获取数据 ECHARTS图表

    在这个主题中,我们将深入探讨如何利用Ajax动态获取数据,并将其有效地展示在ECharts图表中。 首先,让我们了解Ajax的核心概念。Ajax是一种在不刷新整个网页的情况下,与服务器交换数据并更新部分网页的技术。它...

    ajax动态加载树,支持动态刷新

    3. 实现动态加载:为树的每个节点添加`onOpen`事件监听器,当节点被展开时,通过Ajax请求获取子节点数据并加载。 ```javascript tree.attachEvent("onOpen", function(id, state, e) { if (!tree.isLoaded(id)) { ...

    Ajax技术实现动态获取数据的树状菜单

    Ajax(Asynchronous JavaScript and XML)技术是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,使网页实现异步更新,从而提升了用户体验,使得网页操作更加...

    PHP+Ajax点击加载更多内容

    这个技术的核心在于利用Ajax(异步JavaScript和XML)来实现页面内容的动态加载,而无需刷新整个页面。这不仅可以减少服务器负载,还能节省用户流量,提供流畅的浏览体验。 PHP是一种服务器端脚本语言,常用于构建...

    基于jquery.masonry插件开发的瀑布流ajax动态加载数据功能

    在本项目中,我们利用jQuery Masonry插件来实现瀑布流效果,并结合Ajax技术实现动态加载数据,进一步提升用户体验。 jQuery Masonry插件是由David DeSandro开发的一个JavaScript库,它的主要功能是将网页中的元素以...

    图片ajax动态分批加载

    当满足加载条件(如滚动到底部)时,发送AJAX请求,接收到响应后,利用`append()`或`insertAdjacentHTML()`等方法将新图片添加到页面。 在实际应用中,还需要考虑一些优化措施,例如设置适当的加载指示器,告知用户...

    jQuery+ajax实现动态添加表格tr td功能示例

    本文将详细解析使用jQuery和ajax技术来实现动态添加表格行(tr)和单元格(td)功能的方法。 #### 1. 理解jQuery和ajax技术 **jQuery**是一个快速、简洁的JavaScript库,它封装了许多常用的功能,简化了JavaScript...

    ajax-tab(动态加载tab) 切换

    Ajax-tab 是一种基于Ajax实现的动态加载tab切换功能,它允许用户在不同的内容之间切换,而无需完全刷新整个页面。下面将详细探讨Ajax-tab的工作原理、实现方式以及相关知识点。 一、Ajax-tab工作原理 1. 用户交互...

    使用Ajax动态加载JSON文件

    "使用Ajax动态加载JSON文件"这个主题就涉及到了两个核心概念:Ajax和JSON。Ajax(Asynchronous JavaScript and XML)是一种在无需刷新整个网页的情况下,能够更新部分网页的技术。而JSON(JavaScript Object ...

    3种风格的AJAX左右切换内容3种风格的AJAX左右切换内容

    根据提供的文件信息,本文将详细解析“3种风格的AJAX左右切换内容”这一主题,主要涉及使用AJAX实现页面内容动态加载与切换的技术细节及其三种不同风格的应用案例。 ### 一、AJAX概述 AJAX(Asynchronous ...

    ajax获取单独页面

    `ajaxtab` 是一种用于实现Ajax加载的插件,它可以帮助开发者轻松地创建带有Ajax功能的标签页。用户在切换标签页时,不需要加载整个页面,而是仅加载对应标签页的内容,从而提高页面加载速度和用户体验。 使用 `ajax...

    mui上拉加载+选项卡+ajax

    在本示例中,`ajax`被用来从服务器获取动态数据,这可能包括新加载的列表项或者选项卡中的特定内容。`jQuery`的`$.ajax()`方法或`mui`内置的`$.ajax()`方法可以用于发起`ajax`请求,请求成功后,数据通常会被插入到...

Global site tag (gtag.js) - Google Analytics