Reputation: 835
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:
Verified so many post on stack overflow, nothing worked. tried below code"
path = os.path.dirname(r"C:\Users\ab\AppData\Local\Google\Chrome\User Data\Default\Extensions\jfpmbokkdeapjommajdfmmheiiakdlgo\0.1.7_0\manifest.json")
options = webdriver.ChromeOptions()
options.add_argument('--incognito')
options.add_argument("--load-extension={path}")
driver = webdriver.Chrome(chrome_options=options, executable_path='C:\chromedriver_win32\chromedriver.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 ?
Upvotes: 2
Views: 5453
Reputation: 2853
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)
Upvotes: 0
Reputation: 14135
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.
Upvotes: 5