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
ディスカッション
コメント一覧
まだ、コメントがありません