几个爬虫框架简单罗列总结
最近工作需要,用了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,可能我哪里设置有问题。
- 驱动:chromedriver_win32.zip 下载地址:https://chromedriver.storage.googleapis.com/index.html?path=76.0.3809.126
- Chrome:ChromeStandaloneSetup64.exe 版本:76.0.3809.132 下载地址:官网下载
- Selenium:selenium-java-3.141.59 下载地址:maven仓库自取
为了不处理过多的timeout,放弃了Selenium。选择cdp4j,鼠标手势操作,选择自己用java代码实现。
复杂请求操作封装到 cdp4j里实现。考虑到cdp4j需要操作浏览器,量产成本有点高,所以部分接口使用htmlunit实现,图省事,借用了htmlunit里的cookie管理的功能。它会在请求相关接口时带上该带的cookie,手动斜眼笑。
PS:cdp4j、Selenium同样可以操作基于chromium开发出的浏览器,就不举例了。
源代码也不贴了,不堪入眼