Я создаю браузер, в котором логинюсь на сайте и считываю ссылки, для каждой ссылки мне нужно создать еще один браузер и при этом чтобы куки первого браузера распространялись и на второй.
FirefoxDriver driver = new FirefoxDriver();
Добавление куков первого браузера ко второму работает некорректно, при передаче определенных куков кидает ошибку.
driver.manage().getCookies().forEach(c -> driver2.manage.addCookie(c));
Как селениуму дать понять, что он должен использовать общий файл с куками (или где они хранятся)? Спасибо!
Пример ответа уже существует в англоязычном SO:
var driver1 = new FirefoxDriver();
driver1.Navigate().GoToUrl("http://www.html-kit.com/tools/cookietester/");
driver1.FindElementByXPath("//input[@value=\"Set Test Cookie\"]").Click();
var driver2 = new FirefoxDriver();
driver2.Navigate().GoToUrl("http://www.html-kit.com/tools/cookietester/");
// Copy cookies from one driver to the other
foreach (Cookie c in driver1.Manage().Cookies.AllCookies)
{
driver2.Manage().Cookies.AddCookie(new Cookie(c.Name, c.Value, c.Domain.TrimStart('.'), c.Path, c.Expiry));
}
driver2.Navigate().Refresh();
Как там сказано, проблема с cookies может быть только если ваши драйверах идут на другие домены, и в этом случае такие шаги помогут вам скопировать cookies правильно:
Driver1: Navigate to SiteA Driver1: Login Driver2: Navigate to SiteA Copy cookies from Driver1 to Driver2 Driver2: Refresh (Should be logged in now) Driver2: Navigate to SiteB
Решил проблему иначе, создал профиль в Firefox, в котором залогинился на нужном сайте и для каждого объекта FirefoxDriver использую этот профиль.
Продвижение своими сайтами как стратегия роста и независимости