Загрузка хрома с использованием селена

Все, что я хочу, - загрузить хром-расширение из интернет-магазина. Я много ищу, чтобы понять это, но только узнал, что мы можем загрузить расширение с локальной машины. Мне действительно интересно, не имеет ли селена функциональность для загрузки расширения из интернет-магазина или из URL-адреса.

Пожалуйста, дайте мне знать, что я могу попробовать, используя селен?

Ответ 1

Я не уверен, почему вы особенно относитесь к загрузке с Web-магазина, а затем установите в Chrome.

Я нашел несколько шагов для загрузки chrome-расширений:

-В компьютере, подключенном к Интернету, установите расширение со страницы расширения: https://chrome.google.com/webstore/detail/
-Найдите в исходный код расширения. В XP это можно найти по адресу: C:\Documents and Settings\\Локальные настройки\Данные приложения\Google\Chrome\Пользовательские данные\По умолчанию\Расширения\
-Вы должны увидеть папку с версией (то есть "0.0.21_0" ). Скопируйте эту папку и переместите ее на машину, которую вы хотите установить.
-Открыть хром на отключенной машине и перейти к гаечному ключу → Инструменты → Расширения
-Нажмите "+" рядом с режимом "Разработчик", чтобы отобразить параметры разработчика
-Нажмите "Расширение пакета..." и выберите папку версии в качестве корневого каталога. Оставьте файл закрытого ключа пустым. Это создаст файл .crx в папке версии вместе с закрытым ключом, как если бы вы были разработчиком.

- Или -

1- Найдите идентификатор расширения, которое вас интересует. Когда на странице сведений о расширении это будет что-то вроде:                    bfbmjmiodbnnpllbbbfblcplfjjepjdn после                    https://chrome.google.com/webstore/detail/

2- Вставьте это в любой другой браузер (а не в Chrome): https://clients2.google.com/service/update2/crx?response=redirect&x=id%3D~~~~%26uc

3- и заменив ~~~~ идентификатором расширения. Вам будет предложено сохранить файл CRX. Перетащите этот файл в окно Chrome и продолжайте установку.

Источник: https://productforums.google.com/forum/#!topic/chrome/g02KlhK12fU

Наконец, используйте загруженный .crx файл в ChromeOptions для загрузки расширения

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);

Источник: https://sites.google.com/a/chromium.org/chromedriver/extensions

Ответ 2

Я сделал это с Python на тот случай, если кто-то ищет.

Все, что вам нужно сделать, это загрузить файл .crx (я использовал https://chrome-extension-downloader.com/) и сохранить его где-нибудь, чтобы Python мог получить к нему доступ. В моем примере я импортировал его в ту же папку, что и мой скрипт Python, чтобы загрузить 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')

Ответ 3

  • Поместите хромированный exe в файл документа, если вы хотите следовать этому и иметь успешный результат.

  • Загрузите расширение GET CRX из Google.

  • Загрузите расширение (т.е. мое - "DHS" для тестирования API Rest).

  • Перейдите в Интернет-магазин Chrome → найдите расширение (тот, который вы уже загрузили) → щелкните правой кнопкой мыши по нему и нажмите:: GET CRX
    (Это должно загрузить файл CRX. Для моего случая CRX файл является "extension_1_2_5.crx" )

  • Отбросьте файл CRX в любом окне Chrome (это может отменить его, но не стоит беспокоиться).

  • Теперь создайте свой тест и выполните

    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");
    }
    

    //это URL-адрес расширения, или вы можете получить идентификатор на chrome://расширения/найти расширение и скопировать ID. Однако URL-адрес должен быть URL-адресом расширения.

Ответ 4

Не знаю, почему, но кто-то удалил их ответ, что было правильно. Вот содержание (получено из @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);

Этот конкретный пример представлен в Java

Ответ 5

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

....////....

Ответ 6

Вышеупомянутые решения, хотя технически звучат, не всегда работают так, как предполагалось, поэтому я подумал о другом способе этого. Потому что много раз мне нужно много вещей, которые лучше делать вручную, аутентификации, определенные файлы cookie и т.д.

Я использую папки в качестве профилей, я запускаю:

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

Затем я вручную устанавливаю расширения и выполняю логины, которые мне нужны сейчас, каждый раз, когда я запускаю Webdriver с этой папкой, все есть

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

Преимущество заключается в том, что вы можете использовать несколько папок с разными настройками и расширениями без необходимости устанавливать и удалять расширения, изменять настройки, изменять логины и т.д.

Ответ 7

Для автоматизации расширений Chrome необходимо использовать настольное решение для тестирования пользовательского интерфейса. Чистое решение для веб-тестирования, такое как Selenium, не может автоматизировать надстройки браузера, так как не имеет к ним доступа.

  • Sikuli - хороший вариант для автоматизации. Соскребание экрана доступно, если вы добавите Tesseract.

  • UI.Vision - это еще один хороший инструмент, который включает в себя встроенную очистку экрана (если вам нужно получить текст из пользовательского интерфейса). Он запускается непосредственно в веб-браузере, см. Этот пост на форуме о том, как автоматизировать расширение Chrome с его помощью.