为了解决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函数及页面...
Gecko
测试,Gecko SDK 支持win7,最新版本
gecko browser for delphi application and control
geckodriver geckodriver geckodriver geckodriver
Gecko(Firefox内核) Gecko:Netscape6开始采用的内核,后来的Mozilla FireFox(火狐浏览器) 也...Gecko内核常见的浏览器:[1] Mozilla Firefox、Mozilla SeaMonkey、Epiphany(早期版本)、Flock(早期版本)、K-Meleon
geckodriver-v0.14.0 支持linux和windows 64位
geckodriver.exe是一个驱动程序,用于在Firefox浏览器中运行Selenium测试脚本。geckodriver.exe是Mozilla Gecko浏览器引擎的一部分,它充当Selenium WebDriver与Firefox浏览器之间的桥梁,用于实现Selenium测试脚本...
在android上基于gecko引擎的浏览器简单实现,解决在低版本android系统webview对ES6支持不好的问题。
由于webdriver在不同的firefox版本中,需要的geckodriver.exe版本也不同,所以需要对照版本下载不同的geckodriver.exe,资源中包括了geckodriver.exe 15、16、19、23 4个版本的资源
geckodriver 64位
火狐浏览器用可执行程序GeckoDriver.exe的方式执行WebDriver协议。所有的测试脚本都通过GeckoDriver来执行
geckodriver-v0.29.1-win32和64.zip
python selenim 报错: 'geckodriver' executable needs to be in PATH需下载geckodriver解压放在C:\Python27即可
skybound.gecko.dll文件,skybound.gecko.dll文件 skybound.gecko.dll文件免费下载
Selenium3爬虫需要的火狐Firefox驱动器geckodriver windows 32位
selenium3对火狐浏览器需要geckodriver
java.lang.IllegalStateException: The path to the driver executable must be set by the webdriver.gecko.driver system property; for more information, see ...