博客园  :: 首页  :: 管理

最近在使用selenium实现浏览器自动化,使用的 inprivate 无痕模式, 加载过一个 扩展

但是又同时需要加载另一个PAD的扩展,按如下写法就发现,生效的只有最后一个

options.add_argument(r"--load-extension=C:\Users\qq5201351\AppData\Local\Microsoft\Edge\User Data\Default\Extensions\kagpabjoboikccfdghpdlaaopmgpgfdc\2.61.0.32_0")
options.add_argument(r"--load-extension=C:\Users\qq5201351\AppData\Local\Microsoft\Edge\User Data\Default\Extensions\kjldmpkefedgljefehmmfifbhnjngmbh\3.11.9_0") 

最后通过查询才了解到:

在使用 --load-extension 参数加载多个 Edge 扩展时,只有最后一个扩展被成功加载,第一个没有生效。

这是 Chromium 内核浏览器(包括 Microsoft Edge)的一个已知限制:

Chromium 不支持通过多次使用 --load-extension 参数加载多个扩展。如果多次指定该参数,只有最后一个会被加载。

正确的解决方法:要加载多个扩展,必须将所有扩展的路径用逗号 , 连接成一个字符串,然后只调用一次 --load-extension。

class CustomEdgeWebDriver(webdriver.Edge):
    
    def __init__(self,role="",private_mode=False,headless=False):
        # 初始化浏览器选项,创建实例的时候可以选择不传入 role="xxx" 参数
        custom_options = self._configure_options(role,private_mode,headless)
        super().__init__(options=custom_options)  # 调用父类构造函数传入配置
    
    def _configure_options(self,role,private_mode,headless):
        """封装自定义配置项"""
        options = Options()
        options.add_argument("--start-maximized")
        options.add_argument("--disable-blink-features=AutomationControlled")
        options.add_experimental_option("excludeSwitches", ["enable-automation"])
        options.add_argument("--force-device-scale-factor=1.1")
        options.add_experimental_option("detach", True)

        if private_mode:
            options.add_argument("inprivate")
            
        if headless:
            options.add_argument('--headless')
       
        if role=="pam":
            ext_PAD = r"C:\Users\qq5201351\AppData\Local\Microsoft\Edge\User Data\Default\Extensions\kagpabjoboikccfdghpdlabopmgpgfdc\2.61.0.32_0"
            ext_Delinea = r"C:\Users\qq5201351\AppData\Local\Microsoft\Edge\User Data\Default\Extensions\kjldmpkffedgljefehmmfifbhnjngmbh\3.11.9_0"
            options.add_argument(f"--load-extension={ext_PAD},{ext_Delinea}")
            
                
        return options

补充说明:

这个行为在 Chrome 和 Edge 中一致,因为它们都基于 Chromium。

官方文档或命令行帮助中通常不会明确说明这一点,但社区和开发者实践中广泛验证了此限制。

如果你尝试在启动参数中写两次 --load-extension=...,Chromium 会覆盖前一个值,只保留最后一个。

 

 

 

尊重别人的劳动成果 转载请务必注明出处:https://www.cnblogs.com/5201351/p/19404343