#c# #selenium-webdriver #selenium-chromedriver #parallel.foreach #parallel.for
Вопрос:
Мне нужна помощь/совет в следующей ситуации: мне нужно открыть 1000 URL-адресов одновременно в разных экземплярах драйвера Chrome. Все URL-адреса принадлежат одному домену, и для этого необходимо войти в систему. Каково решение для достижения этой цели?
Я сделал:
Listlt;Tuplelt;string, intgt;gt; _separar = _listacomindex.ToList(); Listlt;Listlt;Tuplelt;string, intgt;gt;gt; _100 = new Listlt;Listlt;Tuplelt;string, intgt;gt;gt;(); _100 = ChunkBy(_separar, 1000); Parallel.For(0, 1000, index =gt; { Directory.CreateDirectory(@"C:JPDATABASEInicio" index.ToString()); DirectoryCopy(@"C:JPDATABASEInicioStart", @"C:JPDATABASEInicio" index.ToString(), true); }); ConcurrentBaglt;ConcurrentBaglt;HtmlDocumentgt;gt; fichaprod = new ConcurrentBaglt;ConcurrentBaglt;HtmlDocumentgt;gt;(); for (int i = 0; i lt; _linksdivididos.Count(); i ) { fichaprod.Add(_vaibuscardocumento(_100[i])); }
копия каталога предназначена для сохранения сеанса chrome открытым(вход в систему).
private static ConcurrentBaglt;HtmlDocumentgt; _vaibuscardocumento(Listlt;Tuplelt;string,intgt;gt; lista) { //RECEBE UMA LISTA ConcurrentBaglt;HtmlDocumentgt; _prod = new ConcurrentBaglt;HtmlDocumentgt;(); Parallel.ForEach(lista, _url =gt; { _prod.Add(_trataurl(_url)); }); return _prod; } private static HtmlDocument _trataurl(Tuplelt;string,intgt; link) { try { HtmlDocument docTEST = new HtmlDocument(); ChromeDriver _newchrome; Debug.WriteLine(link.Item1); //ConcurrentBaglt;Listlt;stringgt;gt; _link = new ConcurrentBaglt;Listlt;stringgt;gt;(); ChromeOptions options = new ChromeOptions(); options.AddArgument("--headless"); options.AddArgument("no-sandbox"); options.Proxy = null; options.AddArgument("--dns-prefetch-disable"); options.AddArgument(string.Format("user-data-dir={0}", @"C:JPDATABASEInicio" link.Item2.ToString())); _newchrome = new ChromeDriver(options); _newchrome.Navigate().GoToUrl(link.Item1); Thread.Sleep(500); //HtmlDocument docTEST = new HtmlDocument(); docTEST.LoadHtml(_newchrome.PageSource); _newchrome.Close(); _newchrome.Quit(); Thread.Sleep(500); return docTEST; } catch (Exception Ex) { // Ex.ToString(); //MessageBox.Show(link.Item1); return null; //continue; //throw; } }