(1). CDP源码目录
(2). 为什要看CDP源码,并绕过WebDriver协议?
以前有看过Selenium源码,总体来说:它的业务模型我不太喜欢.主要有以下几点原因:
- Selenium编程,经常看到在代码里添加Sleep之类的语句,难道就没有等待浏览器执行完,再回调业务,告诉业务已经执行完了吗?然后,业务再进行处理吗?也有可能是我对Selenium不太了解!
- 阻塞式编程,阻塞式编程有优点:在理解上容易,但缺点:CPU利用率下降.
- 为爬虫或者自动化测试留下伏笔.
- 同时,也是:知其然知其所以然.
(3). CDP用到了哪些设计模式
- 动态代理.
- 观察者模式.
- Builde模式.
- 工厂模式.
(4). 爬虫实现思路
实现思路如下(Boss/Work/MetaCenter):
- 在宿主机上创建:N个Work(Java)进程.
- 每个Work进程里创建N个:ChromeTab,每个ChromeTab有一个ws地址.
- Work进程实时向MetaCenter汇报当前宿主机的情况,自己的任务情况.
- Work接受任务去实现真正的爬,可以利用:Disruptor把”爬取”和”解析分离”(CDP是可以拿到JS解析析之后的DOM节点的,参考:DumpHtmlFromPageExample).
- Master接受任务,获取:MetaCenter的指标,再分派任务给:Work.
(5). 自动化测试实现思路
自动化测试,实际应该可以做到(可视化)任务编排的,这部份需要做一个比较好的设计.后续有时间,会将UML设计图画出来.