SeleniumでChromeのプロファイルを使う
Chromeのユーザープロファイル
Chromeのユーザー毎のデータ(履歴、ブックマーク、パスワード等)は、ユーザープロファイルに保存されます。
SeleniumでChromeDriverを動かす場合、デフォルトではユーザープロファイルは一時ディレクトリに作成され、終了後にクリアされます。ログイン情報を引き継ぎたい場合は、使用するユーザープロファイルを指定する必要があります。
ユーザープロファイルは、Chrome起動時のオプションで指定します。
–user-data-dir | ユーザープロファイルの保存先を指定 |
–profile-directory | 使用するユーザープロファイルを指定 |
現在使用しているプロファイルは、chrome://versionで見ることができます。
上の画像では
–user-data-dir:C:\Users\xxxxx\AppData\Local\Google\Chrome\User Data
–profile-directory:Profile 1
となります。
動作
–user-data-dirを指定しない場合
プロファイルは一時ファイルとして作成され、Chrome終了後に廃棄されます。
–profile-directoryを指定しない場合
ユーザープロファイルは–user-data-dirで指定したフォルダ内のデフォルトのプロファイル(通常はDefault)を使用します。
指定したフォルダが存在しない場合
–user-data-dir、–profile-directoryに指定したフォルダが存在しない場合は、自動でフォルダが作成されます(Windows環境でのみ確認)ので、タイプミスに注意しましょう。
ChromeDriverでのユーザープロファイルの指定
ChromeDriverのChromeOptionsクラスを利用します。
add_argumentメソッドを使用して、オプション項目を追加しています。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--user-data-dir=D:\\tmp\\User Data')
options.add_argument('--profile-directory=Profile1')
options.add_argument('--lang=en')
path = r'D:\tmp\driver\chromedriver_win32\chromedriver.exe'
driver = webdriver.Chrome(executable_path=path ,options=options)
driver.get("chrome://version")
#driver.quit()
package example;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
public class App
{
public static void main( String[] args )
{
ChromeOptions options = new ChromeOptions();
options.addArguments("--user-data-dir=D:\\tmp\\User Data");
options.addArguments("--profile-directory=Profiel1");
options.addArguments("--lang=en");
String path = "D:\\tmp\\driver\\chromedriver_win32\\chromedriver.exe";
System.setProperty("webdriver.chrome.driver", path);
WebDriver driver = new ChromeDriver(options);
driver.get("chrome://version");
//driver.quit();
}
}
using System;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
namespace example
{
class Program
{
static void Main(string[] args)
{
ChromeOptions options = new ChromeOptions();
options.AddArgument("--user-data-dir=D:\\tmp\\User Data");
options.AddArgument("--profile-directory=Profile1");
options.AddArgument("--lang=en");
String path = @"D:\tmp\driver\chromedriver_win32"; //フォルダを指定
IWebDriver driver = new ChromeDriver(path, options);
driver.Navigate().GoToUrl("chrome://version");
//driver.Quit();
}
}
}
Imports OpenQA.Selenium.Chrome
Module Module1
Sub Main()
Dim options = New ChromeOptions()
'エスケープなしでも通る
options.AddArgument("--user-data-dir=D:\tmp\User Data")
options.AddArgument("--profile-directory=Profile1")
options.AddArgument("--lang=en")
'フォルダを指定
Dim path = "D:\\tmp\\driver\\chromedriver_win32"
Dim driver = New ChromeDriver(chromeDriverDirectory:=path, options:=options)
driver.Navigate.GoToUrl("chrome://version")
'driver.Quit()
End Sub
End Module
require "selenium-webdriver"
options = Selenium::WebDriver::Chrome::Options.new
options.add_argument('--user-data-dir=D:\tmp\User Data') #エスケープなしでも通る
options.add_argument('--profile-directory=Profiel1')
options.add_argument('--lang=en')
Selenium::WebDriver::Chrome.driver_path = 'D:\tmp\driver\chromedriver_win32\chromedriver.exe'
driver = Selenium::WebDriver.for :chrome , options: options
driver.get("chrome://version")
#driver.quit()
let webdriver = require('selenium-webdriver');
let chrome = require('selenium-webdriver/chrome');
var options = new chrome.Options();
options.addArguments("--user-data-dir=D:\\tmp\\User Data");
options.addArguments("--profile-directory=Profile1");
options.addArguments("--lang=en");
let path = "D:\\tmp\\driver\\chromedriver_win32\\chromedriver.exe";
(async () => {
var driver = await new webdriver.Builder()
.forBrowser('chrome')
.setChromeOptions(options)
.setChromeService(new chrome.ServiceBuilder(path))
.build();
await driver.get("chrome://version");
//await driver.quit();
})();
ユーザープロファイルの重複
同一のユーザーデータディレクトリで、複数のChromeDriverを操作することはできません。同時に2個以上のChromeDriverを操作する場合は、–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
Chromeを手動で開いている場合も、ChromeDriver側で同じユーザーデータディレクトリを同時に使用することはできません。
ですから、ChromeDriver用のユーザーデータディレクトリ(–user-data-dir)は、手動用とは分けておいたほうがよいでしょう。
2021-01-19Selenium Tips--user-data-dir,ChromeDriver,ChromeOptions
Posted by sj
ディスカッション
コメント一覧
まだ、コメントがありません