Утечка памяти при использовании веб-драйвера Selenium в цикле for - PullRequest
0 голосов
/ 26 марта 2020

Я запускаю сценарий python, который использует селен, на экземпляре EC2 (ubuntu).

По моему плану AWS у меня 2 ГБ памяти. Я обновился до бесплатной версии после некоторых проблем с производительностью моего скрипта. Однако, когда я проверяю свободную память при подключении к серверу Ubuntu, я вижу только 348 МБ свободной памяти и 353 МБ свободной памяти!

На данный момент у меня запущено только два python скрипты, один раз в день, используя crontab. Скрипты запускают довольно длинный массив URL-адресов и извлекают информацию из каждого из них.

base_url = 'https://www.bandsintown.com/en/c/san-francisco-ca?page='

events = []
eventContainerBucket = []

for i in range(1,25):

    #cycle through pages in range
    driver.get(base_url + str(i))
    pageURL = base_url + str(i)

    # get events links
    event_list = driver.find_elements_by_css_selector('div[class^=_3buUBPWBhUz9KBQqgXm-gf] a[class^=_3UX9sLQPbNUbfbaigy35li]')
    # collect href attribute of events in even_list
    events.extend(list(event.get_attribute("href") for event in event_list))



    allEvents = []
    for event in events:

        driver.get(event)
        //do a bunch of other stuff

    driver.quit()

Может кто-нибудь увидеть в этом коде внутреннюю проблему, которая может вызвать утечку памяти? Я думаю, что свободная память должна снова увеличиться go, когда скрипт прекратит работу, но это не так.

Я попытался вызвать driver.close() в for-l oop, так что после информации извлекается из каждого URL, окно закрывается. Я думал, что это поможет с утечкой памяти - к сожалению, это дало мне ошибку selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id.

Любая помощь будет принята с благодарностью. Я нахожусь на правильном пути с driver.close () или с чем-то другим проблема?

1 Ответ

0 голосов
/ 26 марта 2020

Вместо выхода из драйвера вы пробовали driver.close()?

close () - используется для закрытия браузера

совсем () - Он используется для выключения экземпляра веб-драйвера.

for i in range(1,25):

    #cycle through pages in range
    driver.get(base_url + str(i))
    pageURL = base_url + str(i)

    # get events links
    event_list = driver.find_elements_by_css_selector('div[class^=_3buUBPWBhUz9KBQqgXm-gf] a[class^=_3UX9sLQPbNUbfbaigy35li]')
    # collect href attribute of events in even_list
    events.extend(list(event.get_attribute("href") for event in event_list))

    allEvents = []
    for event in events:
        driver.get(event)

    driver.close()

Я проверил ваш код без проблем. Пожалуйста, найдите ниже скриншот для получения более подробной информации

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...