使用 Java 使用 Selenium WebDriver 加载 Chrome 配置文件

Posted

技术标签:

【中文标题】使用 Java 使用 Selenium WebDriver 加载 Chrome 配置文件【英文标题】:Load Chrome Profile using Selenium WebDriver using java 【发布时间】:2013-01-06 23:47:45 【问题描述】:

我在让 Selenium 加载 chrome 配置文件时遇到了一些麻烦。

String pathToChrome = "driver/chromedriver.exe";
System.setProperty("webdriver.chrome.driver", pathToChrome);

DesiredCapabilities capabilities = DesiredCapabilities.chrome();
String chromeProfile = "C:\\Users\\Tiuz\\AppData\\Local\\Google\\Chrome\\User Data\\Default";
ArrayList<String> switches = new ArrayList<String>();
switches.add("--user-data-dir=" + chromeProfile);
capabilities.setCapability("chrome.switches", switches);
WebDriver driver = new ChromeDriver(capabilities);
driver.get("http://www.google.com");

它开始很好并且运行完美,但我想加载默认配置文件,因为我想在启用一些扩展和测试一些首选项的情况下对其进行测试。

有人知道为什么这段代码不起作用吗?

我已经在 Windows 7 x64 上使用 Selenium 2.29.1 和 2.28.0 和 chromedriver 26.0.1383.0 对其进行了测试。

【问题讨论】:

嗨,你能指导我看一个教程,关于如何做到这一点 - 如何为你的驱动程序添加 chrome 配置文件?非常感谢! 【参考方案1】:

这是一个老问题,但我仍然无法让它工作,所以我做了更多研究以了解发生了什么。 @PrashanthSams 的答案是正确的,但我错误地将 \Default 添加到配置文件路径的末尾

我发现 Chrome 将\Default 附加到user-data-dir 中指定的配置文件路径。因此,如果您的个人资料路径指定为:

user-data-dir=C:\Users\user_name\AppData\Local\Google\Chrome\User Data\Default\

它会附加\Default,你最终会在:

C:\Users\user_name\AppData\Local\Google\Chrome\User Data\Default\Default

这与您在该用户配置文件下正常打开 chrome 时获得的配置文件不同。

如果您打开命令提示符,导航到 chrome 可执行目录,并使用与此类似的指定选项运行 chrome,您还可以验证您的设置:

chrome.exe --user-data-dir="C:\Users\user_name\AppData\Local\Google\Chrome\User Data"

最后,您可以转到 Chrome 中的新标签并浏览至chrome://version/,您将看到正在使用的实际配置文件。它将被列为:

配置文件路径 C:\Users\user_name\AppData\Local\Google\Chrome\User Data\Default

【讨论】:

这是黄金。谢谢兄弟。 要选择不同的配置文件,比如配置文件 1,请使用 options.addArguments("profile-directory=Profile 1"); 嗨,你能指导我看一个教程,关于如何做到这一点 - 如何为你的驱动程序添加 chrome 配置文件?非常感谢!【参考方案2】:

这些组合对我有用 :)

System.setProperty("webdriver.chrome.driver","C:\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("user-data-dir=C:/Users/user_name/AppData/Local/Google/Chrome/User Data");
options.addArguments("--start-maximized");
driver = new ChromeDriver(options);

【讨论】:

对我不起作用,它会继续从新的干净会话开始 这个解决方案对我也不起作用。 ` options = webdriver.EdgeOptions() options.add_argument("user-data-dir=C:\\Users\\user_name\\AppData\\Local\\Microsoft\\Edge\\User Data") driver = webdriver.Edge (options=options) driver.maximize_window()`【参考方案3】:

Chrome 在 Linux 上存储配置文件的路径。

String chromeProfilePath = "/home/(user)/.config/google-chrome/Profile3/";

创建 ChromeOptions 对象,禁用扩展并添加我想通过“.addArguments”使用的配置文件。

ChromeOptions chromeProfile = new ChromeOptions();
chromeProfile.addArguments("chrome.switches", "--disable-extensions");
chromeProfile.addArguments("user-data-dir=" + chromeProfilePath);

正如 JasonG 上面所说,在此之后,Google-Chrome 会将 \Default 附加到您提供的字符串中。

“/Profile3”目录中有一个“/Default”文件夹,所以我所做的是......

我将“/Profile3”的内容复制到“/Default”文件夹中。

像往常一样设置浏览器系统属性和路径,调用接收ChromeOption的构造函数就可以正常工作了。

WebDriver driver = new ChromeDriver(chromeProfile);

【讨论】:

这个对我有用!谢谢,蒂亚戈和杰森G!我尝试将我现有的配置文件“Profile 6”重命名为“selenium”,并在 Windows 10 上的“selenium\Default”下复制了“Profile 6”的内容,并且成功了。 在 Mac 上我用过String chromeProfilePath = "/Users/&lt;User Name&gt;/Library/Application Support/Google/Chrome";【参考方案4】:

你应该试试这个

op.addArgument("--user-data-dir=C:/Users/username/AppData/Local/Google/Chrome/User Data/");

op.addArgument("--profile-directory=Profile 2");

【讨论】:

【参考方案5】:

我将默认配置文件复制到任何其他文件夹,然后我确实连接到此副本

ChromeOptions options = new ChromeOptions();
options.AddArgument("--user-data-dir=C:\\AnyFolder");
driver = new ChromeDriver(options);

所以它使用默认配置文件

【讨论】:

【参考方案6】:

我在 Windows 中尝试过,以下代码适用于我:

String userProfile= "C:\\Users\\user_name\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\";
ChromeOptions options = new ChromeOptions();
options.addArguments("user-data-dir="+userProfile);
options.addArguments("--start-maximized");
WebDriver driver = new ChromeDriver(options);
driver.get("http://www.google.com");

如何知道它是否工作? 知道的一种方法是运行程序两次而不杀死之前的 chrome 实例。如果配置文件有效,您将在第一个浏览器窗口中看到第二个实例“作为新选项卡”。如果它不起作用,您将获得第二个实例“作为新的浏览器窗口”。

【讨论】:

【参考方案7】:

根据 ChromeDriver wiki,这是一个已知问题,目前不可能。

https://code.google.com/p/selenium/wiki/ChromeDriver

【讨论】:

【参考方案8】:

以上这些解决方案都不适合我。经过几个小时的不懈研究和尝试,我已经找到了这个解决方案

        System.setProperty("webdriver.chrome.driver", "/usr/local/bin/chromedriver");
        ChromeOptions chromeOptions = new ChromeOptions();
        chromeOptions.addArguments("--start-maximized");
        //chrome://version/
        
        chromeOptions.addArguments("--user-data-dir=/home/username/.config/google-chrome");
        //load default profile
        chromeOptions.addArguments("--profile-directory=Default");

【讨论】:

以上是关于使用 Java 使用 Selenium WebDriver 加载 Chrome 配置文件的主要内容,如果未能解决你的问题,请参考以下文章

[Selenium+Java] Execute JavaScript based code using Selenium Webdriver

selenium-java自动化测试环境搭建中的问题以及解决方法

selenium模块

webdriver--API(java版) THE FIRST PART

Python教程:selenium模块用法教程

selenium使用自动下载driver版本----webdriver-manager