selenium 调控 chrome 浏览器做爬虫有什么特殊功能是 cdp 做不到的吗

2019-09-22 21:06:55 +08:00
 ClericPy

peace & love, 不是引战, 提问为主

2013 年就看到用 selenium 搞爬虫的例子

那个年代 phantomjs 作者还没放弃, 各种 driver 也算不错

然后 chrome/chronium 忘了哪个版本出来, 原生支持 remote debug 功能 (参见 CDP 官方文档, chrome devtools protocol), firefox 也支持着, 就有点不明白 selenium 做爬虫有什么特别好的地方, 之前一直以为它就是个做测试用的

cdp 刚出不久接到任务搞过相关爬虫, 虽然各种 socket 把我绕的晕了一段时间, 调度一堆进程实例也好多僵尸进程孤儿进程以及忘记 close fds...

不过切身使用过以后, 不论性能 /兼容性 /CPU 内存使用率都更舒服的多, 2CPU 8GB 机器开 40 多 headless 实例才用了一半多资源, 每个实例还可以开很多 tab (之所以不全在一个实例里开 tab, 还是那个浏览器禁止对同一个域名发起太多连接的梗)

所以有点想知道 selenium 被用做爬虫到底还有什么特别有优势的地方

PS: 已经启动的 chrome 进程, 怎么动态修改代理 ip 和 user-agent, 早年间 headless 模式下不支持 pac-file, 也没找到什么好方法动态改 pac 的方式, 然后 user-agent 也不知道怎么像 chrome 插件那样动态更改, proxy 和 UA 都是启动时参数搞的

6391 次点击
所在节点    Python
27 条回复
littlespider89
2019-09-23 10:55:36 +08:00
echo aHR0cHM6Ly9naXRodWIuY29tL0dvb2dsZUNocm9tZS9wdXBwZXRlZXIvaXNzdWVzLzY3OCNpc3N1
ZWNvbW1lbnQtMzYxOTU3MjM0Cg== |base64 --decode
这里有讨论, 可以用 puppeteer 的 request iterception 来实现
ClericPy
2019-09-23 11:07:41 +08:00
@littlespider89 忘了这招曲线救国了, cdp 里可以对 request 和 response 做很多 patch, 感谢提醒
xjlnjut730
2019-09-23 14:12:30 +08:00
@neoblackcap 你可以看下 chromedriver 的源码,是基于 cdp 实现了 webdriver 协议。
neoblackcap
2019-09-23 14:21:37 +08:00
@xjlnjut730 那也只能说 chromedriver 是那样做,geckodriver 可不是
supersu
2019-09-27 18:26:38 +08:00
动态 UA 可以了解一下 user_agents 这个库
ClericPy
2019-09-27 18:31:51 +08:00
@supersu 还真有这么个库...... 不过你确定能搞到 cdp 里去?

已经结贴了, 没有锁定功能, 我在 append 里提一下吧...
15399905591
2019-09-30 14:40:54 +08:00
使用 selenium 其实很方便,只是因为对应的 driver 太重,并且限制很多,而且现在大厂都针对各种 driver 做了防范,所以越来越难用了。现在 Puppeteer 已经越来越流行了,可以考虑下这个。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/603129

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX