How to add extension in incognito mode when launched from selenium chrome webdriver with python

Question:

We are doing some testing using selenium python webdriver where we need to open one url in incognito mode and enable one extension already installed and then do some actions.

My findings:

  • loading of extension in incognito mode not working
  • extension getting loaded when icgnito mode turned off

Verified so many post on stack overflow, nothing worked.
tried below code”

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)

which throwing error cannot load manifest.json either missing or not readable. However i have made sure the path is correct.

any suggestion please how to load extension while opening chrome driver in incognito mode ?

Asked By: asp

||

Answers:

Rather you loading the required cookies/extension as part of your chrome options, other option is using the chrome profile. Check my answer in this post

To more on the profiles and how they work refer here

Here is the logic to turn on the extension in the incognito mode.

Python:

# 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()");

Refer to my answer in this post for more information on the js used above.

Answered By: supputuri

Here is my code snippet that automatically opens list of extensions and turns off extension while in incognito mode.

However, pls use this code only if you already considered and tried using another clean profile as was suggested by users above.


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)

Answered By: Johnny Cheesecutter
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.