在 webdriver 中对 Firefox 和 Chrome 的内存消耗进行基准测试

Dav*_*542 3 python firefox selenium google-chrome

我正在尝试最大限度地增加可以在我的计算机上运行脚本的浏览器数量。当我启动webdriver. 例如:

from selenium import webdriver
driver = webdriver.Chrome()
driver.get('www.yahoo.com')

# - or - #

from selenium import webdriver
driver = webdriver.Firefox()
driver.get('www.yahoo.com')
Run Code Online (Sandbox Code Playgroud)

unu*_*tbu 5

实例化webdriver.Chromewebdriver.Firefox生成至少一个其他进程,因此要估计总内存消耗,最容易测量启动进程前后可用的总系统内存。如何找到使用的总内存取决于您的操作系统;在的PSUtils模块支持Linux,Windows中,OSX,FreeBSD和Sun Solaris的。

import os
import multiprocessing as mp
import contextlib
import time
import selenium.webdriver as webdriver
import selenium.webdriver.support.ui as UI
import selenium.webdriver.support.expected_conditions as EC
import psutil

def worker(browsername, args, N):
    start_mem = psutil.virtual_memory()
    Driver = getattr(webdriver, browsername)
    drivers = [Driver(*args) for i in range(N)]
    end_mem = psutil.virtual_memory()
    for driver in drivers:
        driver.quit()
    return end_mem.used - start_mem.used

if __name__ == '__main__':
    N = 10
    pool = mp.Pool(1)

    for driver, args in [('Firefox', ()),
                         ('Chrome', ()), 
                         ('PhantomJS', ('phantomjs',))]:
        used = pool.apply(worker, [driver, args, N])
        print('{:>10}: {}'.format(driver, used))
        time.sleep(5)

    pool.close()
    pool.join()
Run Code Online (Sandbox Code Playgroud)

产量

   Firefox: 1072779264
    Chrome: 1124683776
 PhantomJS: 102670336
Run Code Online (Sandbox Code Playgroud)

所以看起来PhantomJS使用的内存减少了大约 10 倍。

技术说明:没有可靠的方法可以强制 Python 进程在不终止进程的情况下将其使用的内存交还给操作系统 。所以我使用 multiprocessing 在一个单独的进程中生成每个测试,以便在它终止时释放使用的内存。的块,直到结束。pool.apply()worker