如何通过Selenium的--user-data-dir参数打开Chrome配置文件

dzhpxtsq  于 2023-04-27  发布在  Go
关注(0)|答案(3)|浏览(306)

我试图加载一个chrome浏览器与 selenium 使用我现有的帐户和设置从我的个人资料。
我可以使用ChromeOptions来设置userdatadir和profile目录。这会像我想要的那样用我的配置文件加载浏览器,但浏览器随后会挂起60秒并超时,而不会再推进任何自动化。
如果我不使用用户数据目录和配置文件设置,它工作正常,但不使用我的配置文件。
我所做的阅读指出,不能有一个以上的浏览器打开同一时间与同一个配置文件,所以我确保没有打开,而我运行该程序。它仍然挂起60秒,即使没有另一个浏览器打开。

m_Options = new ChromeOptions();
m_Options.AddArgument("--user-data-dir=C:/Users/Me/AppData/Local/Google/Chrome/User Data");
m_Options.AddArgument("--profile-directory=Default");
m_Options.AddArgument("--disable-extensions");
m_Driver = new ChromeDriver(@"pathtoexe", m_Options);
m_Driver.Navigate().GoToUrl("somesite");

它总是挂在GoToUrl上。我不知道还能尝试什么。

wmvff8tz

wmvff8tz1#

根据您的代码测试,您试图加载默认*Chrome配置文件 *,这将违反所有 * 最佳实践 *,因为 * 默认Chrome配置文件 * 可能包含以下内容之一:

  • 扩展
  • 网站Map
  • 浏览历史
  • 等等

因此,默认*Chrome配置文件 * 可能不符合您的 * 测试规范 ,并且在加载时可能会引发异常。因此,您应该始终使用自定义Chrome配置文件 *,如下所示。
要 * 创建 * 和 * 打开 * 新的 *Chrome配置文件 *,您需要遵循以下步骤:

  • 打开 Chrome 浏览器,单击 * 侧菜单 *,然后单击 * 设置 *,在该设置上打开 urlchrome://settings/
  • 在“人员”部分,单击“管理其他人员”,弹出一个窗口。
  • 单击 * 添加人员 *,提供 * 人员姓名 *,选择 * 图标 *,保持项目 * 为该用户创建桌面快捷方式 * 处于选中状态,然后单击 * 添加 * 按钮。
  • 您的新配置文件将被创建。
  • 新配置文件的快照SeLeNiUm

  • 现在会创建一个桌面图标为SeLeNiUm - Chrome
  • 从桌面图标的属性SeLeNiUm - Chrome中获取配置文件目录的名称。例如**--profile-directory=“Profile 2”**

  • 获取系统中 profile-directory 的绝对路径,如下所示:
C:\\Users\\Thranor\\AppData\\Local\\Google\\Chrome\\User Data\\Profile 2
  • 现在通过AddArgument方法沿着key user-data-dirprofile-directory 的值传递给 ChromeOptions 的示例,如下所示:
m_Options = new ChromeOptions();
m_Options.AddArgument("--user-data-dir=C:/Users/Me/AppData/Local/Google/Chrome/User Data/Profile 2");
m_Options.AddArgument("--disable-extensions");
m_Driver = new ChromeDriver(@"pathtoexe", m_Options);
m_Driver.Navigate().GoToUrl("somesite");
  • 执行Test
  • 观察 Chrome 是否使用 *Chrome配置文件 * 初始化为SeLeNiUm

o0lyfsai

o0lyfsai2#

如果您想使用默认配置文件运行Chrome(因为您需要扩展程序),则需要使用另一个浏览器(如Microsoft Edge或Microsoft IE)运行脚本,您的代码将启动Chrome示例。
我的PHP代码:

namespace Facebook\WebDriver;
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\Remote\RemoteWebDriver;
use Facebook\WebDriver\Chrome\ChromeOptions;

require_once('vendor/autoload.php');

$host = 'http://localhost:4444/';

$options = new ChromeOptions();
$options->addArguments(array(
    '--user-data-dir=C:\Users\paulo\AppData\Local\Google\Chrome\User Data',
    '--profile-directory=Default',
    '--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
));
   
$caps = DesiredCapabilities::chrome();
$caps->setCapability(ChromeOptions::CAPABILITY, $options);
$caps->setPlatform("Windows");

$driver = RemoteWebDriver::create($host, $caps);

$driver ->manage()->window()->maximize();

$driver->get('https://www.google.com/');

// your code goes here.

$driver->quit();
zte4gxcn

zte4gxcn3#

我的家伙,在我的环境与 chrome 63和 selenium 的控制,我发现同样的问题(60秒等待打开网页)。
为了解决这个问题,我找到了一种方法,在chrome ./[user-data-dir]/[Profile]/Preferences文件中设置默认网页,这是一个json数据,需要插入“Preferences”文件以获得结果

...
"session":{
  "restore_on_startup":4,
  "startup_urls":[
     "http://localhost/test1"
  ]
}
...

对于从selenium设置“首选项”,我使用了以下示例代码

ChromeOptions chromeOptions = new ChromeOptions();

//set my user data dir
chromeOptions.addArguments("--user-data-dir=/usr/chromeDataDir/");  

//start create data structure to for insert json in "Preferences" file
Map<String, Object> prefs = new HashMap<String, Object>();
prefs.put("session.restore_on_startup", 4);
List<String> urlList = new ArrayList<String>();
urlList.add("http://localhost/test1");
prefs.put("session.startup_urls", urlList);

//set in chromeOptions data structure 
chromeOptions.setExperimentalOption("prefs", prefs);

//start chrome
ChromeDriver chromeDriver = new ChromeDriver(chromeOptions);
//this get command for open web page, response instant
chromeDriver.get("http://localhost/test2")

我在这里找到信息https://chromedriver.chromium.org/capabilities

相关问题