SeleniumでEdge(Chromium版)のプロファイルを使う
Edgeのバージョン
Edgeには2つのバージョンがあります。
- レガシー版Edge
Windows10に標準機能として提供されていたEdge
InternetExplorerから派生したEdgeHTMLベースのEdge
(2021年3月9日サポート終了予定) - Chromium版Edge
2020年1月15日にリリースされた、オーブソースであるChromiumベースのEdge
(現在はこちらが提供されている) 
レガシー版のEdgeは、プロファイルを切り替えることができません。
手動で操作する場合も、Seleniumで操作する場合も、同一のプロファイルを使用します。
Chomium版のEdgeは、プロファイルの切り替えが可能です。
Edge(Chomium版)のプロファイル
ユーザー毎のデータは、ユーザープロファイルに保存されます。
SeleniumでEdgeDriver(WebDriver)を動かす場合、デフォルトではユーザープロファイルは一時ディレクトリに作成され、終了後にクリアされます。ログイン情報を引き継ぎたい場合は、使用するユーザープロファイルを指定する必要があります。
ユーザープロファイルは、起動時のオプションで指定します。

| –user-data-dir | ユーザープロファイルの保存先を指定 | 
| –profile-directory | 使用するユーザープロファイルを指定 | 
現在使用しているプロファイルは、edge://versionで見ることができます。

上の画像では 
    –user-data-dir:C:\Users\xxxxx\AppData\Local\Google\Chrome\User Data
    –profile-directory:Profile 1
となります。
動作
–user-data-dirを指定しない場合
プロファイルは一時ファイルとして作成され、Edge終了後に廃棄されます。
–profile-directoryを指定しない場合
ユーザープロファイルは–user-data-dirで指定したフォルダ内のデフォルトのプロファイル(通常はDefault)を使用します。
指定したフォルダが存在しない場合
–user-data-dir、–profile-directoryに指定したフォルダが存在しない場合は、自動でフォルダが作成されます(Windows環境でのみ確認)ので、タイプミスに注意しましょう。
EdgeDriverでのユーザープロファイルの指定
EdgeDriverのEdgeOptionsクラスを利用します。
add_argumentメソッドを使用して、オプション項目を追加しています。
# msedge-selenium-toolsが必要
# pip install msedge-selenium-tools
from msedge.selenium_tools import Edge, EdgeOptions
#from selenium.webdriver.edge.options import Options
options = EdgeOptions()
options.use_chromium = True
options.add_argument('--user-data-dir=D:\\tmp\\Edge Data')
options.add_argument('--profile-directory=Profile1')
options.add_argument('--lang=en')
path = r'D:\tmp\driver\Edge\msedgedriver.exe'
driver = Edge(executable_path=path, options=options)
driver.get("edge://version")
#driver.quit()
/* selenium-java-4.0.0が必要
*  https://www.selenium.dev/downloads/
*/
package example;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.edge.EdgeOptions;
public class edge_profile {
    public static void main( String[] args )
    {
        EdgeOptions options = new EdgeOptions();
        options.addArguments("--user-data-dir=D:\\tmp\\Edge Data");
        options.addArguments("--profile-directory=Profile1");
        System.setProperty("webdriver.edge.driver", "D:\\tmp\\driver\\Edge\\msedgedriver.exe");
        EdgeDriver driver = new EdgeDriver(options);
        driver.get("edge://version");
        //driver.quit();
    }
}
// Microsoft.Edge.SeleniumToolsが必要
using System;
using Microsoft.Edge.SeleniumTools;
//using OpenQA.Selenium.Edge;
namespace edge_profile
{
    class Program
    {
        static void Main(string[] args)
        {
            EdgeOptions options = new EdgeOptions();
            options.UseChromium = true;
            options.AddArgument("--user-data-dir=D:\\tmp\\Edge Data");
            options.AddArgument("--profile-directory=Profile1");
            options.AddArgument("--lang=en");
            String path = @"D:\tmp\driver\Edge";    //フォルダを指定
            EdgeDriver driver = new EdgeDriver(path, options);
            driver.Navigate().GoToUrl("edge://version");
            //driver.Quit();
        }
    }
}
' Microsoft.Edge.SeleniumToolsが必要
Imports Microsoft.Edge.SeleniumTools
'Imports OpenQA.Selenium.Edge
Module Module1
    Sub Main()
        Dim options = New EdgeOptions()
        options.UseChromium = True
        'エスケープなしでも通る
        options.AddArgument("--user-data-dir=D:\tmp\Edge Data")
        options.AddArgument("--profile-directory=Profile1")
        options.AddArgument("--lang=en")
        'フォルダを指定
        Dim path = "D:\\tmp\\driver\\Edge"
        Dim driver = New EdgeDriver(edgeDriverDirectory:=path, options:=options)
        driver.Navigate.GoToUrl("edge://version")
        'driver.Quit()
    End Sub
End Module
# selenium-webdriver 4.0.0が必要
# gem install selenium-webdriver --pre
gem "selenium-webdriver", "4.0.0.alpha7"
require "selenium-webdriver"
options = Selenium::WebDriver::EdgeChrome::Options.new
options.add_argument('--user-data-dir=D:\tmp\Edge Data')    #エスケープなしでも通る
options.add_argument('--profile-directory=Profile1')
options.add_argument('--lang=en')
Selenium::WebDriver::Edge::Service.driver_path = 'D:\tmp\driver\Edge\msedgedriver.exe'
driver = Selenium::WebDriver.for :edge_chrome , options: options
driver.get("edge://version")
#driver.quit()
/* edge-selenium-toolsが必要
*  npm install @microsoft/edge-selenium-tools
*/
let edge = require('selenium-webdriver/edge');
let options = new edge.Options();
options.setEdgeChromium(true);
options.addArguments("--user-data-dir=D:\\tmp\\Edge Data");
options.addArguments("--profile-directory=Profile1");
options.addArguments("--lang=en");
let path = "D:\\tmp\\driver\\edge\\msedgedriver.exe";
let service = new edge.ServiceBuilder(path).build();
(async () => {
    var driver = await edge.Driver.createSession(options, service);
    await driver.get("edge://version");
    //await driver.quit();
})();

ユーザープロファイルの重複
同一のユーザーデータディレクトリで、複数のEdgeDriverを操作することはできません。同時に2個以上のEdgeDriverを操作する場合は、–user-data-dirの指定を分ける必要があります。
エラーメッセージ
InvalidArgumentException: invalid argument: user data directory is already in use, please specify a unique value for --user-data-dir argument, or don't use --user-data-dir
Edgeを手動で開いている場合も、EdgeDriver側で同じユーザーデータディレクトリを同時に使用することはできません。
ですから、EdgeDriver用のユーザーデータディレクトリ(–user-data-dir)は、手動用とは分けておいたほうがよいでしょう。
2021-01-24Selenium Tipsedge-selenium-tools,EdgeDriver,EdgeOptions
Posted by sj

ディスカッション
コメント一覧
まだ、コメントがありません