web-dev-qa-db-fra.com

Charger l'extension chrome à l'aide de sélénium

Tout ce que je veux, c'est charger une extension chrome à partir de la boutique en ligne . Je fais beaucoup de recherches pour le comprendre, mais nous ne pouvons savoir que nous pouvons charger une extension à partir d'une machine locale . Je me demande vraiment si Selenium ne le fait pas avoir la fonctionnalité pour charger une extension depuis un magasin Web ou depuis une URL.

S'il vous plaît laissez-moi savoir ce que je suis en train d'essayer est possible en utilisant Selenium?

8
D Deshmane
  1. Mettez chromedriver exe dans votre fichier de document si vous voulez suivre cela et obtenir un résultat positif.

  2. Téléchargez l'extension "GET CRX" de Google.

  3. Téléchargez votre extension (le mien est "DHS" pour le test de l’API Rest).

  4. Accédez au Chrome Web Store >> recherchez votre extension (celle que vous avez déjà téléchargée) >> faites un clic droit dessus et cliquez sur: :: GET CRX
    (Cela devrait télécharger le fichier CRX. Dans mon cas, le fichier CRX est "extension_1_2_5.crx")

  5. Déposez le fichier CRX dans n’importe quelle fenêtre de Chrome (cela peut le rejeter, mais pas de souci).

  6. Maintenant, construisez votre test et exécutez

    public static void openChromeExtension(){
    
        System.setProperty("webdriver.chrome.driver", "/Users/[your local name]/Documents/chromedriver");
    
        ChromeOptions options = new ChromeOptions();
        options.addExtensions(new File("/Users/[your local name]/Documents/extension_1_2_5.crx"));
    
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability(ChromeOptions.CAPABILITY, options);
        ChromeDriver driver = new ChromeDriver(capabilities);
        System.out.println("Opening extension");
        driver.get("chrome-extension://**aejoelaoggembcahagimdiliamlcdmfm**/dhc.html"); 
    
        driver.navigate().refresh();
        System.out.println("Refresh successfully");
    }
    

    // c'est l'URL de l'extension ou vous pouvez obtenir l'id sur chrome: // extensions/trouver l'extension et copier leID. Cependant, l'URL doit être l'URL de l'extension.

6
Grace Kabuika

Je l'ai fait avec Python au cas où quelqu'un regarderait. 

Tout ce que vous avez à faire est de télécharger le fichier .crx (j’ai utilisé https://chrome-extension-downloader.com/ ) et de l’enregistrer quelque part où Python puisse y accéder. Dans mon exemple, je l'ai importé dans le même dossier que mon script Python pour charger exempleOfExtensionDownloadedToFolder.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')
4
David Liu

Je ne sais pas pourquoi, mais quelqu'un a effacé leur réponse, ce qui était correct. Voici le contenu (provenant de @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);

Cet exemple particulier est en Java

3
sircapsalot
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());

....////....
0
Pavlo Vasilikiv

Les solutions ci-dessus, bien que techniquement correctes, ne fonctionnent pas toujours comme prévu, alors j’ai pensé à une autre façon de le faire ..__Parfois, j’ai souvent besoin de beaucoup de choses mieux à faire manuellement, des authentifications, certains cookies, etc.

J'utilise des dossiers en tant que profils, je lance:

chrome_options = Options()
chrome_options.add_argument("user-data-dir=Selenium") 
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("www.google.com")

Ensuite, j'installe manuellement les extensions et je fais les connexions dont j'ai besoin maintenant chaque fois que je lance Webdriver avec ce dossier, tout y est

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

L'avantage est que vous pouvez utiliser plusieurs dossiers avec des paramètres et des extensions différents sans qu'il soit nécessaire d'installer et de désinstaller des extensions, de modifier les paramètres, de modifier les connexions, etc.

0
Eduard Florinescu