firefox+geckodriver+selenium在centos上运行服务器内存溢出

背景:

写的selenium脚本在服务器1上执行正常,因为特殊原因需要迁移到另外一台服务器2上执行,firefox+geckodriver+selenium+python的版本都是一样,脚本也一致,但是在服务器2上执行却发现机器内存一直在减少,直至挂掉
使用的环境版本:
Python 3.6.7
Firefox 68.6.0esr
geckodriver 0.26.0
selenium 3.141.0
脚本demo:
在这里插入图片描述

原因:

最后排查出原因时因为机器1和机器2的centos的版本不一样,机器1是centos6,机器2是centos7。所以能兼容使用的firefox+geckodriver版本也不一样
这是两个机器的版本截图
在这里插入图片描述
出现内存溢出是因为一直在刷这个log(调用geckodriver的时候报错了),导致内存溢出
在这里插入图片描述
目前定位的原因是:这个centos7驱动和firefox的版本不配备,firefox 68 无法使用headless,执行firefox --headless无法使用。

然后74的版本在这个驱动上-headless没有问题,但是geckodriver 这个驱动74的版本没法用,只能选择70以下的firefox版本,但是70以下的firefox版本在centos7上跑不了headless
根据mozilla官方的图,但是根据上面的版本下载下来不靠谱
在这里插入图片描述

解决:

总之,最后各种尝试下,选择了低版本的组合,具体如下(主要是Firefox和geckodriver的版本匹配):
Python 3.6.8
Mozilla Firefox 57.0.4
geckodriver 0.19.1
selenium 3.141.0

脚本也需要改,demo:
在这里插入图片描述

#!/usr/bin/python3

from selenium import webdriver

from pyvirtualdisplay import Display

from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
import time
import tempfile, os.path as path
from selenium.webdriver import PhantomJS

display = Display(visible=0, size=(2048,1024))
display.start()
#log_path = path.join(tempfile.mkdtemp(), 'ghostdriver.log')
binary = FirefoxBinary('/usr/bin/firefox/firefox')
driver = webdriver.Firefox(firefox_binary=binary)
#driver = PhantomJS(service_log_path = log_path)

urls=['url1','url2','url3','url4']
for url in urls:
    print('开始循环',url)
    driver.get(url)
    time.sleep(3)
    print('等待3秒结束')
    print(driver.title)

driver.quit()

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值