如何在Python版Selenium中设置设备内存及解决CHR_MEMORY属性显示异常问题
问题1:如何在Python版Selenium中设置设备内存?
其实Selenium本身没有直接设置设备内存的专属API,但如果用的是Chrome浏览器,我们可以通过Chrome的启动参数来限制浏览器进程的内存使用,或者模拟内存压力场景。这里给你两种常用方案:
- 限制V8引擎的JavaScript内存:用
--max_old_space_size参数(单位MB),控制Chrome中V8引擎的最大旧空间内存,也就是JavaScript可使用的内存上限。 - 模拟内存压力:通过
--enable-features=MemoryPressureSimulation和--memory-pressure-off参数开启内存压力模拟,方便测试低内存环境下的页面表现。
具体代码示例:
from selenium import webdriver from selenium.webdriver.chrome.options import Options # 初始化Chrome配置 chrome_options = Options() # 设置JavaScript内存上限为2048MB(2GB) chrome_options.add_argument("--max_old_space_size=2048") # 开启内存压力模拟(按需添加) chrome_options.add_argument("--enable-features=MemoryPressureSimulation") chrome_options.add_argument("--memory-pressure-off") # 启动浏览器 driver = webdriver.Chrome(options=chrome_options) # 这里写你的业务逻辑,比如访问目标页面 driver.get("https://example.com") # 操作完成后关闭浏览器 driver.quit()
如果要模拟整个设备的内存限制,Selenium层面做不到,得借助Docker、虚拟机这类工具限制容器/虚拟机的内存配额,再在里面运行Selenium。
问题2:修改WebDriver中CHR_MEMORY属性,通过bot.sannysoft.com的检测
你遇到的CHR_MEMORY FAIL,是因为Selenium驱动的Chrome默认隐藏了window.chrome.memory属性,而真实浏览器中这个属性是存在的。要解决这个问题,我们可以借助Chrome DevTools Protocol(CDP)注入这个属性,让检测脚本认为它是原生存在的。
核心思路是:通过CDP执行一段JavaScript,给window.chrome对象添加memory属性,返回的内存数据复用浏览器原生的window.performance.memory(这个属性在真实浏览器和WebDriver环境中都存在)。
代码示例:
from selenium import webdriver # 启动Chrome浏览器 driver = webdriver.Chrome() # 使用CDP注入window.chrome.memory属性 driver.execute_cdp_cmd("Runtime.evaluate", { "expression": """ // 给window.chrome添加memory属性,模拟真实浏览器行为 Object.defineProperty(window.chrome, 'memory', { get: function() { return { totalJSHeapSize: window.performance.memory.totalJSHeapSize, usedJSHeapSize: window.performance.memory.usedJSHeapSize, jsHeapSizeLimit: window.performance.memory.jsHeapSizeLimit }; }, // 允许后续修改(可选) configurable: true }); """, "returnByValue": False }) # 访问测试页面 driver.get("https://bot.sannysoft.com/") # 等待你查看结果,按回车关闭浏览器 input("查看测试结果后按回车键退出...") driver.quit()
注意事项:
- 确保Chrome版本和ChromeDriver版本匹配,避免CDP命令兼容性问题;
- 这种方式是模拟原生属性,不会影响浏览器正常的内存使用逻辑,只是让检测脚本能读取到它。
内容的提问来源于stack exchange,提问作者Abdhul
相关产品推荐
相关产品推荐

