V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
sxd96
V2EX  ›  Python

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

  •  
  •   sxd96 ·
    xudongx · 2019-12-20 21:54:07 +08:00 · 8551 次点击
    这是一个创建于 1790 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    15 条回复    2019-12-28 17:58:35 +08:00
    airqj
        1
    airqj  
       2019-12-20 22:16:58 +08:00 via Android
    这个作者自己都不维护了吧
    用 pupputeer 吧
    Arrowing
        2
    Arrowing  
       2019-12-20 22:38:53 +08:00
    同建议使用 pupputeer , 毕竟谷歌还在支持的
    ClericPy
        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 上的文章或帖子一搜一大把...
    Maxwell272
        4
    Maxwell272  
       2019-12-21 01:09:13 +08:00 via iPhone
    这个是啥 term 好好看
    mitu9527
        5
    mitu9527  
       2019-12-21 08:48:32 +08:00
    selenium 接触了一段时间,本身是做自动化测试用的,低级 API,代码写起来又慢问题又多,拿去写爬虫的话问题就更多了。同建议使用 puppeteer,省心省时。
    sxd96
        6
    sxd96  
    OP
       2019-12-21 09:50:45 +08:00 via iPhone
    @airqj
    @Arrowing
    @mitu9527
    感谢,下次可以试试 puppeteer。我也知道 selenium 不是做爬虫的,但是不管什么网页都可以一套流程走完,还是挺偷懒的...
    sxd96
        7
    sxd96  
    OP
       2019-12-21 09:53:20 +08:00 via iPhone
    @ClericPy selenium 的内存问题是搜到很多回答....可是仍然解决不了,以后不考虑用这玩意写爬虫了
    sxd96
        8
    sxd96  
    OP
       2019-12-21 09:55:19 +08:00 via iPhone
    @Maxwell272 iTerm,主题是 tango light。
    zfj1441
        9
    zfj1441  
       2019-12-21 10:07:37 +08:00 via iPhone
    上半年写了爬虫使用 selenium 完成登陆(主要是有滑块拖动)获取 cookies 给爬虫。最后 kill 掉 selenium 启动的浏览器进程。楼主可以试试这思路
    ClericPy
        10
    ClericPy  
       2019-12-21 10:09:19 +08:00
    @sxd96 #7 我五年前实习时候就遇到了内存泄漏问题, 五年过去了我也没搞明白哪漏的... 趁早加入 CDP 大家庭吧, 就是简简单单的 WebSocket, 挺方便的, 顺便学学 JS 还能用在 tampermonkey 上
    真是人生何处不脚本
    murmur
        11
    murmur  
       2019-12-21 10:31:26 +08:00
    正常,定期重启是个好习惯,以前用 phantom 的时候就养成这个习惯了
    jugelizi
        12
    jugelizi  
       2019-12-21 11:44:20 +08:00 via iPhone
    我的解决方法。
    打开浏览器后保留当前页面
    新建标签页去访问网站 用完就关掉
    用驱动里切换 tab 来做 亲测有效
    wzwwzw
        13
    wzwwzw  
       2019-12-21 22:04:08 +08:00
    需要强制 kill 掉进程。
    Leigg
        14
    Leigg  
       2019-12-22 12:27:15 +08:00 via Android
    需要 close 再重启,老毛病
    alienlu19870911
        15
    alienlu19870911  
       2019-12-28 17:58:35 +08:00
    楼主是同 Docker 构建的 selenium 容器做调用吗?如果是的话,需要在 docker-compose.yml 上面添加一些参数,对 JVM 的内存进行限制,还有就是对 node 的 session 进行一些优化。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5850 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 02:53 · PVG 10:53 · LAX 18:53 · JFK 21:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.