前几天写爬虫的时候偷懒,直接用的 selenium。firefox 和 gecokdriver 都是最新版。
跑了一晚上发现 firefox 内存占用从 10%+,到 80%+,最后可能会直接 crash。
浏览器的缓存已经禁用了,甚至尝试使用隐私模式来防止缓存和 cookies。其实目标网页本身不复杂,是个 jsp 页面。
更奇葩的另一个问题是,之前想改用 chrome 试下,结果直接返回空白页。目标网站没有 ssl,然后网上搜了一堆忽略 ssl 安全问题的参数,也都用了。别的 http 页面正常能打开,就目标网站总返回空白,不管在本机还是 vps 上尝试都一样。也很让我困惑。这个和 jsp 页面有关系么?
爬虫现在已经改用 requests 了,但是上面的问题纠结了好久还是不知道原因,求解答下。
1
airqj 2019-12-20 22:16:58 +08:00 via Android
这个作者自己都不维护了吧
用 pupputeer 吧 |
2
Arrowing 2019-12-20 22:38:53 +08:00
同建议使用 pupputeer , 毕竟谷歌还在支持的
|
3
ClericPy 2019-12-21 00:12:05 +08:00 3
selenium 本来就不是做爬虫用的, 只是一群无良营销号刷了七八年前的那个爬虫文章才火成这样, 它明明是个支持多种语言的前端测试框架, 所以内存处理的问题不注意很容易被 WebDriver 的一些毛病给坑到
说作者不更新那个说的是 phantomjs 吧, 那个作者发 post 说 Chrome headless 真香, 恰恰是后者出了不久(chronium headless 更早一些), 所以一般爬虫操作用 Chrome 家自带的 CDP 操作不香吗, 只要会点 WebSocket 和 HTTP, 就能远程调试 Chrome 内置那个 devtools, 而且注入 JS 也是什么都有可能了 不过后来发现 selenium 也支持上 CDP 方式了, 也可以用用 selenium + 内存, 在 google 和 V2EX 上的文章或帖子一搜一大把... |
4
Maxwell272 2019-12-21 01:09:13 +08:00 via iPhone
这个是啥 term 好好看
|
5
mitu9527 2019-12-21 08:48:32 +08:00
selenium 接触了一段时间,本身是做自动化测试用的,低级 API,代码写起来又慢问题又多,拿去写爬虫的话问题就更多了。同建议使用 puppeteer,省心省时。
|
6
sxd96 OP |
7
sxd96 OP @ClericPy selenium 的内存问题是搜到很多回答....可是仍然解决不了,以后不考虑用这玩意写爬虫了
|
8
sxd96 OP @Maxwell272 iTerm,主题是 tango light。
|
9
zfj1441 2019-12-21 10:07:37 +08:00 via iPhone
上半年写了爬虫使用 selenium 完成登陆(主要是有滑块拖动)获取 cookies 给爬虫。最后 kill 掉 selenium 启动的浏览器进程。楼主可以试试这思路
|
10
ClericPy 2019-12-21 10:09:19 +08:00
@sxd96 #7 我五年前实习时候就遇到了内存泄漏问题, 五年过去了我也没搞明白哪漏的... 趁早加入 CDP 大家庭吧, 就是简简单单的 WebSocket, 挺方便的, 顺便学学 JS 还能用在 tampermonkey 上
真是人生何处不脚本 |
11
murmur 2019-12-21 10:31:26 +08:00
正常,定期重启是个好习惯,以前用 phantom 的时候就养成这个习惯了
|
12
jugelizi 2019-12-21 11:44:20 +08:00 via iPhone
我的解决方法。
打开浏览器后保留当前页面 新建标签页去访问网站 用完就关掉 用驱动里切换 tab 来做 亲测有效 |
13
wzwwzw 2019-12-21 22:04:08 +08:00
需要强制 kill 掉进程。
|
14
Leigg 2019-12-22 12:27:15 +08:00 via Android
需要 close 再重启,老毛病
|
15
alienlu19870911 2019-12-28 17:58:35 +08:00
楼主是同 Docker 构建的 selenium 容器做调用吗?如果是的话,需要在 docker-compose.yml 上面添加一些参数,对 JVM 的内存进行限制,还有就是对 node 的 session 进行一些优化。
|