背景:

写的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()

GitHub 加速计划 / ge / geckodriver
7.07 K
1.51 K
下载
WebDriver for Firefox
最近提交(Master分支:2 个月前 )
53fea8f4 2 个月前
f911bb4c 7 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐