爬虫使用 selenium,浏览器内存占用越来越多

2019-12-20 21:54:07 +08:00
 sxd96

前几天写爬虫的时候偷懒,直接用的 selenium。firefox 和 gecokdriver 都是最新版。

跑了一晚上发现 firefox 内存占用从 10%+,到 80%+,最后可能会直接 crash。

浏览器的缓存已经禁用了,甚至尝试使用隐私模式来防止缓存和 cookies。其实目标网页本身不复杂,是个 jsp 页面。

更奇葩的另一个问题是,之前想改用 chrome 试下,结果直接返回空白页。目标网站没有 ssl,然后网上搜了一堆忽略 ssl 安全问题的参数,也都用了。别的 http 页面正常能打开,就目标网站总返回空白,不管在本机还是 vps 上尝试都一样。也很让我困惑。这个和 jsp 页面有关系么?

爬虫现在已经改用 requests 了,但是上面的问题纠结了好久还是不知道原因,求解答下。

8293 次点击
所在节点    Python
15 条回复
airqj
2019-12-20 22:16:58 +08:00
这个作者自己都不维护了吧
用 pupputeer 吧
Arrowing
2019-12-20 22:38:53 +08:00
同建议使用 pupputeer , 毕竟谷歌还在支持的
ClericPy
2019-12-21 00:12:05 +08:00
selenium 本来就不是做爬虫用的, 只是一群无良营销号刷了七八年前的那个爬虫文章才火成这样, 它明明是个支持多种语言的前端测试框架, 所以内存处理的问题不注意很容易被 WebDriver 的一些毛病给坑到
说作者不更新那个说的是 phantomjs 吧, 那个作者发 post 说 Chrome headless 真香, 恰恰是后者出了不久(chronium headless 更早一些), 所以一般爬虫操作用 Chrome 家自带的 CDP 操作不香吗, 只要会点 WebSocket 和 HTTP, 就能远程调试 Chrome 内置那个 devtools, 而且注入 JS 也是什么都有可能了
不过后来发现 selenium 也支持上 CDP 方式了, 也可以用用

selenium + 内存, 在 google 和 V2EX 上的文章或帖子一搜一大把...
Maxwell272
2019-12-21 01:09:13 +08:00
这个是啥 term 好好看
mitu9527
2019-12-21 08:48:32 +08:00
selenium 接触了一段时间,本身是做自动化测试用的,低级 API,代码写起来又慢问题又多,拿去写爬虫的话问题就更多了。同建议使用 puppeteer,省心省时。
sxd96
2019-12-21 09:50:45 +08:00
@airqj
@Arrowing
@mitu9527
感谢,下次可以试试 puppeteer。我也知道 selenium 不是做爬虫的,但是不管什么网页都可以一套流程走完,还是挺偷懒的...
sxd96
2019-12-21 09:53:20 +08:00
@ClericPy selenium 的内存问题是搜到很多回答....可是仍然解决不了,以后不考虑用这玩意写爬虫了
sxd96
2019-12-21 09:55:19 +08:00
@Maxwell272 iTerm,主题是 tango light。
zfj1441
2019-12-21 10:07:37 +08:00
上半年写了爬虫使用 selenium 完成登陆(主要是有滑块拖动)获取 cookies 给爬虫。最后 kill 掉 selenium 启动的浏览器进程。楼主可以试试这思路
ClericPy
2019-12-21 10:09:19 +08:00
@sxd96 #7 我五年前实习时候就遇到了内存泄漏问题, 五年过去了我也没搞明白哪漏的... 趁早加入 CDP 大家庭吧, 就是简简单单的 WebSocket, 挺方便的, 顺便学学 JS 还能用在 tampermonkey 上
真是人生何处不脚本
murmur
2019-12-21 10:31:26 +08:00
正常,定期重启是个好习惯,以前用 phantom 的时候就养成这个习惯了
jugelizi
2019-12-21 11:44:20 +08:00
我的解决方法。
打开浏览器后保留当前页面
新建标签页去访问网站 用完就关掉
用驱动里切换 tab 来做 亲测有效
wzwwzw
2019-12-21 22:04:08 +08:00
需要强制 kill 掉进程。
Leigg
2019-12-22 12:27:15 +08:00
需要 close 再重启,老毛病
alienlu19870911
2019-12-28 17:58:35 +08:00
楼主是同 Docker 构建的 selenium 容器做调用吗?如果是的话,需要在 docker-compose.yml 上面添加一些参数,对 JVM 的内存进行限制,还有就是对 node 的 session 进行一些优化。

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

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

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

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

© 2021 V2EX