如何在隐身模式下添加扩展程序,当使用python从硒铬网络驱动程序启动时



我们正在使用Selenium python webdriver进行一些测试,我们需要在隐身模式下打开一个网址并启用一个已安装的扩展程序,然后执行一些操作。

我的发现:

  • 在隐身模式下加载扩展程序不起作用
  • 当 ICGNITO 模式关闭时加载扩展

验证了这么多关于堆栈溢出的帖子,没有任何效果。尝试以下代码">

path = os.path.dirname(r"C:UsersabAppDataLocalGoogleChromeUser DataDefaultExtensionsjfpmbokkdeapjommajdfmmheiiakdlgo.1.7_0manifest.json")
options = webdriver.ChromeOptions()
options.add_argument('--incognito')
options.add_argument("--load-extension={path}")
driver = webdriver.Chrome(chrome_options=options, executable_path='C:chromedriver_win32chromedriver.exe')
driver.maximize_window()
driver.get(xxxxxxxx)

哪个抛出错误无法加载清单.json丢失或不可读。但是,我已经确保路径正确。

请提出任何建议,如何在隐身模式下打开Chrome驱动程序时加载扩展程序?

相反,您将所需的cookie/扩展程序作为chrome选项的一部分加载,另一种选择是使用chrome配置文件。在这篇文章中检查我的答案

有关配置文件及其工作原理的更多信息,请参阅此处

以下是在隐身模式下打开扩展程序的逻辑。

蟒:

# driver.get("chrome://extensions/?id=extion_name_goes_here"); # <=== general snippet see below example
# driver.get("chrome://extensions/?id=jfpmbokkdeapjommajdfmmheiiakdlgo") 
# select allow in incognito mode checkbox
driver.execute_script("return document.querySelector('extensions-manager').shadowRoot.querySelector('#viewManager > extensions-detail-view.active').shadowRoot.querySelector('div#container.page-container > div.page-content > div#options-section extensions-toggle-row#allow-incognito').shadowRoot.querySelector('label#label input').click()");

有关上面使用的js的更多信息,请参阅我在这篇文章中的回答。

这是我的代码片段,可以在隐身模式下自动打开扩展程序列表并关闭扩展程序。

但是,仅当您已经考虑并尝试使用上述用户建议的另一个干净配置文件时,才使用此代码。


extension_name = "chrome_proxy_extension"
## select Chrome proxy extension
ss = """
var t1 = document.querySelector("extensions-manager").shadowRoot;
var t2 = t1.querySelector("extensions-item-list").shadowRoot;
var lst_ext = t2.querySelectorAll("extensions-item");
var idx_proxy = -1
for (let idx = 0; idx < lst_ext.length; idx++) {
    var el = lst_ext[idx]
    if (el.shadowRoot.innerHTML.indexOf("$EXTENSION_NAME$")>0){
        idx_proxy = idx
    };    
    };
    
var btn = lst_ext[idx_proxy].shadowRoot.querySelector("cr-button")
btn.click()
"""  
ss = ss.replace("$EXTENSION_NAME$", extension_name)
## select toggle with "allow in incognito mode" and press it
ss2 = """
var t1 = document.querySelector("extensions-manager").shadowRoot;
var t2 = t1.querySelector("extensions-detail-view").shadowRoot;
var opt_hide = t2.querySelector("extensions-toggle-row#allow-incognito");
var toggle = opt_hide.shadowRoot.querySelector("cr-toggle");
if (toggle.checked){
    console.log("Incognito mode is already on")
} else {
toggle.click()
}
"""
time.sleep(2)
browser.get("chrome://extensions")
time.sleep(2)
browser.execute_script(ss)
time.sleep(2)
browser.execute_script(ss2)
time.sleep(2)

最新更新