You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 17:53:09