`
yy8354
  • 浏览: 80403 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Gecko(jrex)研究记录 JS AJAX页面内容抓取处理(1)

阅读更多

为了解决JS AJAX网站问题必须一个能够模拟用户操作行为来得到页面上数据的展示,在模拟用户行为上我们需要解决两件事情:
1、得到渲染后的网页HTML代码 一般在浏览器中查看页面代码 是浏览器直接下载到的页面代码 在未经渲染前 对于JS AJAX输出的内容是无法得到的 这样我们得到的页面内容和直接走socket抓取回来无任何区别 还是无法得到需要的页面内容
2、JS函数及页面元素事件的调用 这些很简单都是依靠用户的EVENT去驱动的,而我们通过SOCKET抓取页面对我们只是流而已无法去模拟用户的EVENT 没有这些EVENT 页面上需要EVENT驱动而展现的内容连显示都不可能 更无从抓取了

在windows下通过WEBBROWSER控件,我们能很简单的解决以上两个问题,但LINUX下暂时只能依赖于FIREFOX内核GECKO想办法了。由于使用JAVA作为开发语言,我们使用了JREX的JAR包,它包装了GECKO的DLL进行本地化调用,可以使我们直接使用JAVA语言来使用GECKO。

核心部分就是对通过JRexCanvas得到一个Document对象转换为DocumentRange然后利用它自带的方法createRange得到渲染后的页面内容(如果熟悉WEBBROWSER的同志们会发现基本很多类名方法名很相似,不过就是JREX缺乏文档只能自己瞎折腾了)

Document doc =navigation.getDocument();
DocumentRange range=((org.mozilla.jrex.dom.JRexDocumentImpl)doc).getDocumentRange();
System.out.println(xmlToString(range.createRange().getCommonAncestorContainer())); 与WEBBROWSER不同没有createTXTRange()方法来直接得到纯的HTML文本,所以只能得到NODE 然后自己去处理

辅助函数用来输出NODE:

public static String xmlToString(Node node) throws Exception {

Source source = new DOMSource(node);

StringWriter stringWriter = new StringWriter();

Result result = new StreamResult(stringWriter);

TransformerFactory factory = TransformerFactory.newInstance();

Transformer transformer = factory.newTransformer();

transformer.setOutputProperty(OutputKeys.METHOD, "html");

transformer.transform(source, result);

return stringWriter.getBuffer().toString();

}

分享到:
评论
7 楼 xiang861206 2011-03-04  
用navigation.loadURI()加载时,要是https协议的就不行
6 楼 mashimaro 2010-03-11  
希望能得到解答 谢谢
5 楼 mashimaro 2010-03-11  
这是什么原因啊
public void onStateChange(ProgressEvent event) {
if (!event.isLoadingDocument()) {
if (done)
return;
done = true;
}
}
这段代码中,怎么判断浏览器是否加载完啊 event.isLoadingDocument这个方法的原理是什么
4 楼 mashimaro 2010-03-11  
我看到浏览器中 由JS动态生成的一部分内容也没显示出 来
3 楼 mashimaro 2010-03-11  
你好 这个程序是不是说 等页面内的所有JS都加载完后 生成了HTML后 可获得的源码啊 但是 为什么我得到的仍然是静态的源码呢
2 楼 yy8354 2009-04-22  
这里只是得到渲染后的代码 不代表任何动态信息都能得到 首先这部分信息必须会被渲染 同时渲染以后生成了HTML代码 你才可能获取
比如说是鼠标移动到上面才显示的内容 首先你得保证它先显示出来 显示出来的时候浏览器才等于渲染出了这个内容 这时候获取渲染后代码 才能得到它的内容 所以第二篇研究的就是怎么调用DOM元素的事件响应 这样可以模拟用户操作来让浏览器进行JS处理和对应HTML渲染
1 楼 cynthia2009 2009-04-20  
最近在学习您讲的这个方法,但是我调通之后,动态信息返回值仍然为空,还在研究中。
不知道您是否遇到此种情况,但愿能得您点播一下。 

相关推荐

    JRex java webbrowser 爬虫ajax网页 源码

    一般在浏览器中查看页面代码 是浏览器直接下载到的页面代码 在未经渲染前 对于JS AJAX输出的内容是无法得到的 这样我们得到的页面内容和直接走socket抓取回来无任何区别 还是无法得到需要的页面内容。 JS函数及页面...

    JRex 爬虫ajax网页 API文档

    一般在浏览器中查看页面代码 是浏览器直接下载到的页面代码 在未经渲染前 对于JS AJAX输出的内容是无法得到的 这样我们得到的页面内容和直接走socket抓取回来无任何区别 还是无法得到需要的页面内容。 JS函数及页面...

    gecko-sdk.rar_Gecko SDK_gecko

    1. **库文件**:这些动态链接库(DLLs)和静态库文件提供了与Gecko引擎交互的接口,使得开发者可以直接调用Gecko的功能,如页面渲染、网络通信等。 2. **头文件**:C++头文件提供了API(应用程序编程接口),开发者...

    Gecko

    Gecko的主要任务是理解和执行HTML、CSS、JavaScript、SVG等Web标准,将这些内容转化为用户在浏览器中看到的页面。 Gecko的设计目标是实现对Web标准的高效、准确支持,并提供跨平台的兼容性。这意味着无论用户在...

    GeckoBrowser_delphi_gecko_browser_

    5. **API 调用**: Delphi 开发者可以使用 Delphi 的 Pascal 语法调用 Gecko 浏览器控件提供的 API,实现如页面导航、历史管理、书签、JavaScript 交互等功能。 6. **安全性与更新**: 由于依赖于 Gecko 引擎,Gecko...

    ajax的基本知识

    AJAX通过JavaScript使用`XmlHttpRequest`对象向服务器发送异步请求,服务器响应后,再由JavaScript解析返回的数据,动态更新页面的部分内容,而无需刷新整个页面。这一过程通常在后台静默执行,用户几乎察觉不到页面...

    geckodriver参数解析.docx

    以上只是`geckodriver`和Selenium的一部分功能,实际上它们支持许多高级操作,如处理框架、处理cookies、模拟鼠标和键盘事件、处理弹出框等等。在实际的自动化测试或网页抓取项目中,这些功能可以帮助开发者高效地...

    geckodriver-v0.29.0-win64.zip

    1. 安装:将geckodriver.exe文件放置在系统的PATH环境变量所包含的目录下,或在运行Selenium脚本时指定其绝对路径。 2. 版本匹配:确保安装的GeckoDriver版本与你的Firefox浏览器版本兼容,以避免出现不兼容问题。 3...

    网页动态抓取

    网页动态抓取是一种技术,主要用于从互联网上获取实时更新或交互式内容,这些内容在静态抓取时可能无法获取到。这项技术对于数据分析、搜索引擎优化(SEO)、内容监控以及网络研究等多个领域都至关重要。 首先,...

    android基于gecko引擎的浏览器示例

    在Android平台上,开发一款基于Gecko引擎的浏览器可以提供更好的Web浏览体验,特别是对于那些运行在较低Android版本的设备,由于内置的WebView组件对ES6(ECMAScript 6)等现代JavaScript特性的支持不足,可能导致...

    geckodriver_Firefox

    **标题解析:** "geckodriver_Firefox" 指的是与Firefox浏览器相关的geckodriver,它是Selenium自动化测试框架中的一个重要组件。 **描述解析:** "geckodriver是selenium自动化库的火狐浏览器驱动",这意味着gecko...

    Gecko-Web浏览器内核源码

    1. **模块化设计**:Gecko采用了模块化的设计,每个模块都有明确的职责,易于维护和扩展。 2. **跨平台支持**:Gecko能运行在多种操作系统上,如Windows、Linux、macOS等,得益于其强大的跨平台能力。 3. **性能优化...

    geckodriver

    geckodriver通过模拟浏览器行为,能够绕过一些反爬机制,比如JavaScript验证、动态加载内容等,使得爬虫能够更真实地模拟用户行为,提高抓取效率和成功率。 6. **使用示例**:在Python中,可以使用以下代码片段来...

    Gecko浏览器内核

    Gecko(Firefox内核) Gecko:Netscape6开始采用的内核,后来的Mozilla FireFox(火狐浏览器) 也...Gecko内核常见的浏览器:[1] Mozilla Firefox、Mozilla SeaMonkey、Epiphany(早期版本)、Flock(早期版本)、K-Meleon

    软件测试geckodriver驱动安装包

    geckodriver.exe是一个驱动程序,用于在Firefox浏览器中运行Selenium测试脚本。geckodriver.exe是Mozilla Gecko浏览器引擎的一部分,它充当Selenium WebDriver与Firefox浏览器之间的桥梁,用于实现Selenium测试脚本...

    geckodriver-v0.20.0-win64.zip

    5. 日志:Geckodriver 可以记录操作日志,这对于调试自动化测试过程中的问题非常有用,可以通过命令行参数开启日志功能。 总之,"geckodriver-v0.20.0-win64.zip" 是 Selenium 自动化测试中必不可少的工具,特别是...

    ajax与HTML5 history pushState:replaceState实例1

    点击导航菜单时,使用ajax将内容加载到右侧,使用pushState方法将当前页面的状态推送到浏览器的历史记录中。当点击浏览器的后退按钮时,使用popstate事件可以让页面恢复到之前的状态。 四、其它知识点 * history....

    geckodriver-v0.29.1-linux64.tar.gz

    在Python的世界里,Selenium3是一款强大的自动化测试工具,尤其在网页爬虫领域,它允许开发者模拟真实用户操作,进行网页的动态内容抓取。然而,要让Selenium3与火狐浏览器(Firefox)协同工作,就需要一个关键的...

    新浪微博评论抓取

    对于评论抓取,可能还会涉及到HTML解析(例如使用BeautifulSoup库),JSON数据处理,甚至可能需要了解一些JavaScript知识,因为很多现代网页使用了AJAX技术动态加载内容。 至于压缩包文件“新浪评论抓取v1.2”,这...

    wine-gecko.rar

    1. `wine-gecko-2.47.2-x86_64.msi`:这是适用于64位系统的Wine Gecko组件。MSI(Microsoft Installer)是一种安装包格式,通常用于Windows平台上的软件部署。这个文件允许64位Wine环境的用户安装并使用Wine Gecko,...

Global site tag (gtag.js) - Google Analytics