All I want is to load a chrome extension from web store.
I do a lot of search to figure it out, but only got to know we can load extension from local machine.
I really wonder if selenium does not have the functionality to load extension from web store or from a URL.
Please let me know what I am trying is possible using selenium ?
I am not sure why you are particular about downloading from Webstore and then install into Chrome.
I found some steps to download chrome extensions:
-With a computer connected to the internet, install the extension from the extension page: https://chrome.google.com/webstore/detail/
-Navigate to the extension source code. In XP this is found at: C:\Documents and Settings\\Local Settings\Application Data\Google\Chrome\User Data\Default\Extensions\
-You should see a version folder (ie. "0.0.21_0"). Copy this folder and move it on the machine you want to install on.
-Open up chrome on the disconnected machine and go to Wrench -> Tools -> Extensions
-Click the + next to Developer mode to display the developer options
-Click 'Pack extension...' and choose the version folder as the root directory. Leave the private key file blank. This will create a .crx file in the version folder along with a private key as if you were the developer.
--Or--
1- Find the ID of the extension you’re interested in. When on the details page of the extension, it will be something like :
bfbmjmiodbnnpllbbbfblcplfjjepjdn
after
https://chrome.google.com/webstore/detail/
2- Paste this into any other browser (not Chrome):
https://clients2.google.com/service/update2/crx?response=redirect&x=id%3D~~~~%26uc
3- and replacing ~~~~ with the extension ID.
You’ll be prompted to save a CRX file. Drag this file to a Chrome window and proceed with installation.
Source: https://productforums.google.com/forum/#!topic/chrome/g02KlhK12fU
Finally, use the downloaded .crx file in ChromeOptions to load the extension
ChromeOptions options = new ChromeOptions();
options.addExtensions(new File("/path/to/extension.crx"));
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
ChromeDriver driver = new ChromeDriver(capabilities);
Source: https://sites.google.com/a/chromium.org/chromedriver/extensions
Not sure why, but somebody deleted their answer, which was correct. Here is the content (sourced from @parishodak):
ChromeOptions options = new ChromeOptions();
options.addExtensions(new File("/path/to/extension.crx"));
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
ChromeDriver driver = new ChromeDriver(capabilities);
This particular example is in Java
I did this with Python in case anyone was looking.
All you have to do is download the .crx file (I used https://chrome-extension-downloader.com/) and save it somewhere that Python can access it. In my example, I imported it to the same folder as my Python script, to load exampleOfExtensionDownloadedToFolder.crx.
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = webdriver.ChromeOptions()
options.add_extension('./exampleOfExtensionDownloadedToFolder.crx')
driver = webdriver.Chrome(chrome_options=options)
driver.get('http://www.google.com')
using System.IO;
using System.IO.Compression;
public static class ChromeExtension
{
public static string Execute()
{
var ParentPath = Directory.GetParent(Directory.GetCurrentDirectory()).Parent;
var DirectoryPath = ParentPath.FullName.Remove(ParentPath.FullName.IndexOf(ParentPath.Name));
string startPath = $"{DirectoryPath}\\Exchanger\\ChromeExtension";
string zipPath = $"{DirectoryPath}Exchanger\\Extension.zip";
if (System.IO.File.Exists(zipPath))
{
System.IO.File.Delete(startPath);
}
ZipFile.CreateFromDirectory(startPath, zipPath);
if (System.IO.File.Exists($"{DirectoryPath}\\Exchanger\\Extension.crx"))
{
System.IO.File.Delete($"{DirectoryPath}\\Exchanger\\Extension.crx");
}
System.IO.File.Move(zipPath, $"{DirectoryPath}\\Exchanger\\Extension.crx");
return $"{DirectoryPath}\\Exchanger\\Extension.crx";
}
}
....////....
Used:
var options = new ChromeOptions();
options.AddExtension(ChromeExtension.Execute());
....////....
The above solutions although technically sound not always work as intended, so I thought another way to do it.
Because many times I need a lot of things that are better done manually, authentications, certain cookies, etc
I use folders as profiles, I run:
chrome_options = Options()
chrome_options.add_argument("user-data-dir=selenium")
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("www.google.com")
Then I manually install the Extensions and do the logins I need now every-time I start the Webdriver with that folder everything is there
chrome_options = Options()
chrome_options.add_argument("user-data-dir=selenium")
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("www.google.com") #Now you can see the Extensions and the logins done are present
The advantage is you can use multiple folders with different setting and Extensions without the need to install and uninstall Extensions, change settings, change logins etc