在for循环中使用Selenium Webdriver时,内存泄漏

问题描述 投票:0回答:1

我正在EC2实例(ubuntu)上运行使用硒的python脚本。

根据我的AWS计划,我有2 GB内存。脚本出现性能问题后,我从免费版本升级到了此版本。但是,当我在连接到ubuntu服务器时检查可用内存时,只看到348MB可用内存和353MB可用内存!

截至目前,我每天仅使用crontab运行两个python脚本。这些脚本通过相当长的网址数组运行,并从每个网址中获取信息。

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

有人能在此代码中看到一个固有的问题,它将导致内存泄漏吗?我认为脚本停止运行后,可用内存应该会再次增加,但事实并非如此。

我试图在for循环中调用driver.close(),以便从每个URL检索信息后,窗口关闭。我当时以为这会有助于内存泄漏-不幸的是,这给了我一个错误selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id

任何帮助将不胜感激。我是否在使用driver.close()的正确路径上,还是其他完全是问题所在?

python selenium amazon-ec2 selenium-chromedriver ubuntu-14.04
1个回答
0
投票

代替驱动程序退出,您是否尝试过driver.close()

close()-用于关闭浏览器

quite()-用于关闭Web驱动程序实例。

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

© www.soinside.com 2019 - 2024. All rights reserved.