私が望むのは、ウェブストアからchrome拡張機能をロードすることです。私はそれを理解するために多くの検索を行いますが、ローカルマシンから拡張機能をロードできることを知りました。 Seleniumには、WebストアまたはURLから拡張機能をロードする機能がありません。
私がしようとしていることをSeleniumを使用して可能ですか?
ウェブストアからダウンロードしてからChromeにインストールすることに特に関心があるのかわかりません。
chrome拡張機能をダウンロードする手順がいくつか見つかりました:
-インターネットに接続されたコンピューターで、拡張機能ページから拡張機能をインストールします。 https://chrome.google.com/webstore/detail/
-拡張機能のソースコードに移動します。 XPこれはC:\ Documents and Settings \\ Local Settings\Application Data\Google\Chrome\User Data\Default\Extensions \にあります
-バージョンフォルダーが表示されます(つまり、「0.0.21_0」)。このフォルダをコピーして、インストールするマシンに移動します。
-chromeを開き、レンチ->ツール->拡張機能に移動します
-開発者モードの横にある+をクリックして、開発者オプションを表示します
-「Pack extension ...」をクリックして、ルートフォルダーとしてバージョンフォルダーを選択します。秘密鍵ファイルは空白のままにします。これにより、開発者であるかのように、秘密キーと共にバージョンフォルダーに.crxファイルが作成されます。
-または-
1-関心のある拡張機能のIDを検索します。拡張機能の詳細ページでは、次のようになります。bfbmjmiodbnnpllbbbfblcplfjjepjdn after https://chrome.google.com/webstore/detail/
2-これを他のブラウザー(Chrome以外)に貼り付けます: https://clients2.google.com/service/update2/crx?response=redirect&x=id%3D~~~~%26uc
3-および~~~~を拡張IDに置き換えます。 CRXファイルを保存するよう求められます。このファイルをChromeウィンドウにドラッグし、インストールを続行します。
ソース: https://productforums.google.com/forum/#!topic/chrome/g02KlhK12f
最後に、ChromeOptionsでダウンロードした.crxファイルを使用して拡張機能をロードします
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
誰かが見ている場合に備えて、Pythonでこれを行いました。
あなたがしなければならないのは、.crxファイルをダウンロードするだけです(私は https://chrome-extension-downloader.com/ を使用し、Python can私の例では、それをmy 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')
これに従って、成功する場合は、chromedriver exeをドキュメントファイルに入れます。
Googleから「GET CRX」拡張機能をダウンロードします。
拡張機能をダウンロードします(つまり、REST APIテスト用の「DHS」です)。
Chrome Web Store >>拡張機能(既にダウンロードした拡張機能)を検索>>を右クリックしてクリック:: 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:// extensions /でIDを取得し、拡張を見つけて[〜#〜] id [〜#〜]をコピーできます。ただし、URLは拡張URLである必要があります。
理由はわかりませんが、誰かが答えを削除しましたが、それは正しかったです。コンテンツは次のとおりです(@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にあります
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());
....////....
上記のソリューションは、技術的には正しいとは限りませんが、常に意図したとおりに機能するとは限らないため、別の方法を考えました。多くの場合、手動、認証、特定の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
利点は、拡張機能のインストールとアンインストール、設定の変更、ログインの変更などを行わずに、異なる設定と拡張機能を持つ複数のフォルダーを使用できることです。