为了解决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();
}
分享到:
相关推荐
一般在浏览器中查看页面代码 是浏览器直接下载到的页面代码 在未经渲染前 对于JS AJAX输出的内容是无法得到的 这样我们得到的页面内容和直接走socket抓取回来无任何区别 还是无法得到需要的页面内容。 JS函数及页面...
一般在浏览器中查看页面代码 是浏览器直接下载到的页面代码 在未经渲染前 对于JS AJAX输出的内容是无法得到的 这样我们得到的页面内容和直接走socket抓取回来无任何区别 还是无法得到需要的页面内容。 JS函数及页面...
1. **库文件**:这些动态链接库(DLLs)和静态库文件提供了与Gecko引擎交互的接口,使得开发者可以直接调用Gecko的功能,如页面渲染、网络通信等。 2. **头文件**:C++头文件提供了API(应用程序编程接口),开发者...
Gecko的主要任务是理解和执行HTML、CSS、JavaScript、SVG等Web标准,将这些内容转化为用户在浏览器中看到的页面。 Gecko的设计目标是实现对Web标准的高效、准确支持,并提供跨平台的兼容性。这意味着无论用户在...
5. **API 调用**: Delphi 开发者可以使用 Delphi 的 Pascal 语法调用 Gecko 浏览器控件提供的 API,实现如页面导航、历史管理、书签、JavaScript 交互等功能。 6. **安全性与更新**: 由于依赖于 Gecko 引擎,Gecko...
AJAX通过JavaScript使用`XmlHttpRequest`对象向服务器发送异步请求,服务器响应后,再由JavaScript解析返回的数据,动态更新页面的部分内容,而无需刷新整个页面。这一过程通常在后台静默执行,用户几乎察觉不到页面...
以上只是`geckodriver`和Selenium的一部分功能,实际上它们支持许多高级操作,如处理框架、处理cookies、模拟鼠标和键盘事件、处理弹出框等等。在实际的自动化测试或网页抓取项目中,这些功能可以帮助开发者高效地...
1. 安装:将geckodriver.exe文件放置在系统的PATH环境变量所包含的目录下,或在运行Selenium脚本时指定其绝对路径。 2. 版本匹配:确保安装的GeckoDriver版本与你的Firefox浏览器版本兼容,以避免出现不兼容问题。 3...
网页动态抓取是一种技术,主要用于从互联网上获取实时更新或交互式内容,这些内容在静态抓取时可能无法获取到。这项技术对于数据分析、搜索引擎优化(SEO)、内容监控以及网络研究等多个领域都至关重要。 首先,...
在Android平台上,开发一款基于Gecko引擎的浏览器可以提供更好的Web浏览体验,特别是对于那些运行在较低Android版本的设备,由于内置的WebView组件对ES6(ECMAScript 6)等现代JavaScript特性的支持不足,可能导致...
**标题解析:** "geckodriver_Firefox" 指的是与Firefox浏览器相关的geckodriver,它是Selenium自动化测试框架中的一个重要组件。 **描述解析:** "geckodriver是selenium自动化库的火狐浏览器驱动",这意味着gecko...
1. **模块化设计**:Gecko采用了模块化的设计,每个模块都有明确的职责,易于维护和扩展。 2. **跨平台支持**:Gecko能运行在多种操作系统上,如Windows、Linux、macOS等,得益于其强大的跨平台能力。 3. **性能优化...
geckodriver通过模拟浏览器行为,能够绕过一些反爬机制,比如JavaScript验证、动态加载内容等,使得爬虫能够更真实地模拟用户行为,提高抓取效率和成功率。 6. **使用示例**:在Python中,可以使用以下代码片段来...
Gecko(Firefox内核) Gecko:Netscape6开始采用的内核,后来的Mozilla FireFox(火狐浏览器) 也...Gecko内核常见的浏览器:[1] Mozilla Firefox、Mozilla SeaMonkey、Epiphany(早期版本)、Flock(早期版本)、K-Meleon
geckodriver.exe是一个驱动程序,用于在Firefox浏览器中运行Selenium测试脚本。geckodriver.exe是Mozilla Gecko浏览器引擎的一部分,它充当Selenium WebDriver与Firefox浏览器之间的桥梁,用于实现Selenium测试脚本...
5. 日志:Geckodriver 可以记录操作日志,这对于调试自动化测试过程中的问题非常有用,可以通过命令行参数开启日志功能。 总之,"geckodriver-v0.20.0-win64.zip" 是 Selenium 自动化测试中必不可少的工具,特别是...
点击导航菜单时,使用ajax将内容加载到右侧,使用pushState方法将当前页面的状态推送到浏览器的历史记录中。当点击浏览器的后退按钮时,使用popstate事件可以让页面恢复到之前的状态。 四、其它知识点 * history....
在Python的世界里,Selenium3是一款强大的自动化测试工具,尤其在网页爬虫领域,它允许开发者模拟真实用户操作,进行网页的动态内容抓取。然而,要让Selenium3与火狐浏览器(Firefox)协同工作,就需要一个关键的...
对于评论抓取,可能还会涉及到HTML解析(例如使用BeautifulSoup库),JSON数据处理,甚至可能需要了解一些JavaScript知识,因为很多现代网页使用了AJAX技术动态加载内容。 至于压缩包文件“新浪评论抓取v1.2”,这...
1. `wine-gecko-2.47.2-x86_64.msi`:这是适用于64位系统的Wine Gecko组件。MSI(Microsoft Installer)是一种安装包格式,通常用于Windows平台上的软件部署。这个文件允许64位Wine环境的用户安装并使用Wine Gecko,...