WebDriver是一个测试框架,使用到浏览器的内核.实际步骤是:
1.打开浏览器(需要一定的时间);
2.加载url并完成动态解析;
3.通过page.asXml()就可以得到完成的html页面
,其实HtmlUnitDriver模拟无界面浏览器,java中有执行JS的引擎rhino,HtmlUnitDriver使用的就是rhino来解析JS的,由于不会去启动有界面的浏览器,所以HTMLUnitDriver的速度比前面的三者快.但是解析JS需要时间,不同的内核对JS的支持也是不同的.
所以,对于只是嵌入少数的JS代码的页面来说,通过page.asxml()来获取完整的页面时没什么问题的,但是对于嵌入较多的JS代码的页面.解析JS是需要很多时间的(对于JVM),而且大多时候不包含有动态生成的内容.
为了解决获取动态代码的问题:我尝试使用Thread.sleep(2000)这样的不确定性代码,确实在一定程度上解决了这样的问题,但是时间的阀值不确定,时间代价较大.
因此,可以说使用WebDriver来辅助爬去动态生成的网页所得到的结果是很不稳定的,
其实WebDirver中HtmlUnitDriver在内部使用的就是httpUnit,所以使用HttpUnit也会遇到同样的问题.
WebDriver是为测试而设计的框架,虽然按照其原理理论上可以用来辅助爬虫获取包含有动态内容的html页面,但是在实际的应用中是不取的,不确定性太大了,稳定性太差,速度太慢,我们还是让框架各尽其值吧,不要折煞了他们的优点。