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

标签 python google-chrome firefox selenium

我正在尝试最大限度地增加我可以在我的计算机上运行脚本的浏览器的数量。当我启动 webdriver 时,我如何计算出每个 Chrome 或 Firefox 进程占用了多少内存。例如:

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

最佳答案

实例化 webdriver.Chromewebdriver.Firefox 产生至少一个 其他进程,因此要估计总内存消耗可能是 最容易测量启动前后可用的总系统内存 过程。如何找到使用的总内存取决于您的操作系统; psutils module支持 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()

产量

   Firefox: 1072779264
    Chrome: 1124683776
 PhantomJS: 102670336

所以它出现了PhantomJS使用大约 10 倍的内存。

技术说明:没有可靠的方法可以强制 Python 进程将其使用的内存返回给操作系统 short of terminating the process .所以我使用 multiprocessing 在一个单独的进程中生成每个测试,所以当它终止时,使用的内存被释放。 pool.apply() 阻塞,直到 worker 结束。

关于python - 在 webdriver 中对 Firefox 与 Chrome 的内存消耗进行基准测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26721929/

相关文章:

javascript - 使用 FileSystem Api 以 Javascript 写入文件

javascript - knockout 值绑定(bind)到 HTML5 日期选择器 (Chrome)

css - Firefox:将边框/轮廓 CSS 属性应用于 SVG 元素

javascript - 相当于 FF 和 IE 中的 'window.location.ancestorOrigins'

python - windows下无法安装scipy

python - 在 Django 中使用 Zoho smtp 的身份验证失败

javascript - "DOMContent event"和 "load event"有什么区别

返回页面后,Firefox 中未调用 jQuery 文档准备就绪

python - 为什么Python中可以在赋值前使用全局变量?

python - 如何像np.random.seed一样为pd.sample制作种子?