Веб-скребок Selenium python засоряет мою оперативную память: драйверы и дисплей xvfb не закрываются после display.stop() и driver.close()

Итак, у меня есть парсер, использующий селен, код ниже. Проблема в том, что каждый раз, когда код запускается, кажется, что постоянно появляется новый процесс в соответствии с htop — как процесс chromedriver, так и процесс XVFB, как можно увидеть здесь https://i.imgur.com/hDOLnWs.png. Я запускал функцию пять раз, и было открыто пять XVFB (и 7 хромированных драйверов по какой-то причине). У меня есть display.stop() и driver.close(), которые должны предотвратить это? Мой код часто выдает ошибку, но у меня также есть инструкции остановки/закрытия в исключении, поэтому это не должно влиять на закрытие. Я использую только Python 2.7, если это актуально. Веб-скрейпер работает нормально, за исключением этой проблемы с засорением ОЗУ.

Что происходит?

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from bs4 import BeautifulSoup
import time
import json
import traceback
from pyvirtualdisplay import Display

def scrapeBank(bank, return_dict):

    try:
        display = Display(visible=0, size=(800, 600))
        display.start()
        options = webdriver.ChromeOptions()
        options.add_argument('--no-sandbox')
        options.add_argument('--disable-extensions')
        options.add_argument('--headless')
        options.add_argument('--disable-gpu')
        driver = webdriver.Chrome(chrome_options=options)

        [do a bunch of stuff]

        print('Bank Scrape completed')  
        display.stop()
        driver.close()
        return_dict['transactions'] = transactions

    except:
        display.stop()
        driver.close()
        print(traceback.format_exc())

person mcplums    schedule 09.03.2019    source источник
comment
Я лично думаю, что проблема с этим закрытием, похоже, что исключение не работает должным образом (как вы его описываете) ... когда я играл с ним, я останавливал драйвер в процессах, поэтому я рекомендую сделать это в качестве теста, а там как пойдет :)   -  person StyleZ    schedule 09.03.2019
comment
Ну, у меня такая же проблема, но ошибка не выдается, поэтому я не думаю, что это связано с оператором exclude. Что именно вы подразумеваете под «я останавливал драйвер в процессах»? Просто вручную завершить процесс? Я запускаю только командную строку ubuntu...   -  person mcplums    schedule 09.03.2019
comment
Я делал это на Mac, рядом со мной нет моего ноутбука, но в основном это было завершение работы драйвера ... я думаю, что это была команда kill в консоли.   -  person StyleZ    schedule 09.03.2019
comment
Конечно, все процессы завершатся, если я вручную выйду из скрипта Python. Так что я могу просто сделать это, чтобы очистить слишком много процессов. Я не уверен, что еще я могу сделать, чтобы проверить это? У меня есть правильный код, он не работает... У меня нет идей....   -  person mcplums    schedule 09.03.2019
comment
вам нужно закрыть драйвер, прежде чем вы остановите отображение, в котором он работает.   -  person Corey Goldberg    schedule 09.03.2019