几个爬虫框架简单罗列总结

最近工作需要,用了4天的时间简单研究了4个java自动化测试框架用来做数据抓取,目前选用了cdp4j,运行较稳定。暂时选用这种方案。

 

基于内核:htmlunit、ui4j

基于浏览器的自动化:cdp4j、Selenium

 

================== 2019年9月19日15:31:53

cdp支持后台鼠标操作,具体自己看文档。本着知识应该严谨一点的态度来更正一下错误,避免误导更多的人..

cdp4j的接口封装:io.webfolder.cdp.command.Input

文档地址:https://chromedevtools.github.io/devtools-protocol/tot/Input

==================

 

记录几个以缺点为主的评价,当然也看具体需求、能力、成员开发习惯等等综合考量。

htmlunit:js和css兼容性极差,基于HttpClient。单纯抓取,简单cookies可以满足。涉及ajax过多时,因为其js兼容问题,各种失败。没有window的概念,跟window交互紧密的时候会拖后腿。

ui4j:在互动上还是差点。测试时间较短,直接pass了,无头运行时发现一个按钮元素获取到了,click()不生效。运行界面展示出来看不到任何动静,直接放弃。可能因为界面看起来太low了吧,没有深入研究。

cdp4j:需要chrome 的支持,基于 chrome开发工具协议跟chrome进行通信的一个封装。在鼠标模拟上需要自己写java代码前台模拟,可以获取AllCookies,也可以获取当前域的cookies,这点比较符合我的需求。整个Demo运行比较稳定。

Selenium:有了鼠标模拟,是前台模拟。引入驱动包后可以操作Chrome或者火狐进行通信操作。没有获取AllCookies的封装(userDataDir\Default\Cookies库里可以读到全部,是个SQLite库),只能获取当前域的cookies,对我来说没用了,我需要的正好是其它ajax请求的域下的cookie。还经常conn timeout,可能我哪里设置有问题。

 

为了不处理过多的timeout,放弃了Selenium。选择cdp4j,鼠标手势操作,选择自己用java代码实现。

复杂请求操作封装到 cdp4j里实现。考虑到cdp4j需要操作浏览器,量产成本有点高,所以部分接口使用htmlunit实现,图省事,借用了htmlunit里的cookie管理的功能。它会在请求相关接口时带上该带的cookie,手动斜眼笑。

 

PS:cdp4j、Selenium同样可以操作基于chromium开发出的浏览器,就不举例了。

源代码也不贴了,不堪入眼

posted @ 2019-09-05 14:42  不放糖的咖啡  阅读(1339)  评论(10编辑  收藏  举报