推荐学习书目
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 · Dec 20, 2019 · 9516 views
    This topic created in 2345 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

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