- Регистрация
- 25.08.2011
- Сообщения
- 1 076
- Реакции
- 1 352
- Баллы
- 113
В статье я хочу поделиться опытом использования Selenium в проекте на ZennoPoster по сбору email.
Сначала краткая информация - что такое Selenium.
Selenium Webdriver - это способ управления браузером для автоматизации любых задачи в интернет.
Selenium работает напрямую с API браузера, и является наболее эффективной эмуляцией человека при работе в сети.
При работе с Selenium открывается абсолютно чистый браузер, в котором и выполняются набранные в коде команды.
Чтобы Selenium заработал нужны:
-любой (почти) браузер последней версии
-webdriver, который по сути есть локальный вебсервер
-код на языке программирования (C# или Python) для запуска браузера и совершения с ним определённых действий
Проекты на Selenium прекрасно встраиваются и работают в Zennoposter.
Все библиотеки, драйверы и шаблоны будут в конце статьи.
Сначала выкладываю шпаргалку по использованию Selenium (для C#), затем перейду к примерам.
Теперь перейдем непосредственно к примерам - как это всё использовать. Для начала работы нужно создать кубик C# в проекте и прописать код.
Поиск в Google
В этом примере открывается окно браузера, вводится в форму поиска слово cheese, нажимается ввод и показывает страницу с результатами поиска.
Чтобы браузер не закрылся, надо закомментировать последнюю строку.
Парсер поиска zennolab
Здесь открываем браузер, вводим в форму поиска слово selenium, нажимаем ввод и показывает страницу с результатами поиска.
Затем собираем коллекцию элементов и путём перебора получаем названия статей в выдачи и ссылки на них.
Работа с Facebook
Теперь переходим на Facebook, авторизуемся (нужно вввести данные), переходим в профиль, на вкладку Друзья и считаем их количество.
Скриншот окна браузера
Переходим на страницу и делаем её скрин с сохранением в указанную папку.
Комбинируя эти примеры можно создать регер, парсер, постер с человекоподобными повадками.
Теперь я покажу, зачем мне понадобился Selenium.
Мне было нужно спарсить базу американского колледжа Goshen College - имена и email студентов и преподавателей.
На запросах было лень делать, а на web пошли глюки - не находилась инфа и показывало ошибки.
А все проблемы получились из-за фреймов и JS-скриптов.
Решил попробовать Selenium.
Парсер Goshen
Настройки простые - указываем список с наиболее распространенными английскими именами.
Они по очереди вставляются в поле поиска, если выдача с таким именем есть - страница парсится, затем имя удаляется и так далее.
Списки мужских и женских популярных имён прилагаются, а также список фамилий.
После окончания сбора дубли надо чистить.
Скажу что Selenium отработал довольно шустро в один поток (многопоточность не работает) без ошибок.
На самом деле проектов было 2, но во 2-м я пока не победил пагинацию.
Полагаю, метод использования Selenium в связке с Zennoposter вполне имеет право на жизнь.
Надеюсь, что эта статья пригодится кому-нибудь в работе. Успехов!
P.S.
Для начала работы файлы из архива selenium.rar с вебдрайверами разаархивируйте в любую папку - у меня D:\selenium
Из архивов examples.rar и parser.rar библиотеки скопируйте в ExternalAssemblies и добавьте в GAC, в общем коде уже всё прописано.
Всё запускалось на версии 5.47.0.0 без проблем.
Сначала краткая информация - что такое Selenium.
Selenium Webdriver - это способ управления браузером для автоматизации любых задачи в интернет.
Selenium работает напрямую с API браузера, и является наболее эффективной эмуляцией человека при работе в сети.
При работе с Selenium открывается абсолютно чистый браузер, в котором и выполняются набранные в коде команды.
Чтобы Selenium заработал нужны:
-любой (почти) браузер последней версии
-webdriver, который по сути есть локальный вебсервер
-код на языке программирования (C# или Python) для запуска браузера и совершения с ним определённых действий
Проекты на Selenium прекрасно встраиваются и работают в Zennoposter.
Все библиотеки, драйверы и шаблоны будут в конце статьи.
Сначала выкладываю шпаргалку по использованию Selenium (для C#), затем перейду к примерам.
C#:
В Общем коде следует прописать один из следующих вариантов (или все вместе, без разницы):
// NuGet: Selenium.WebDriver.ChromeDriver - по такому запросу можно найти последнюю версию библиотеки
using OpenQA.Selenium.Chrome; //прописываем в общий код
IWebDriver driver = new ChromeDriver(); //объявлем драйвер в проекте
// NuGet: Selenium.Mozilla.Firefox.Webdriver - по такому запросу можно найти последнюю версию библиотеки
using OpenQA.Selenium.Firefox; //прописываем в общий код
IWebDriver driver = new FirefoxDriver(); //объявлем драйвер в проекте
// NuGet: Selenium.WebDriver.PhantomJS - по такому запросу можно найти последнюю версию библиотеки
using OpenQA.Selenium.PhantomJS; //прописываем в общий код
IWebDriver driver = new PhantomJSDriver(); //объявлем драйвер в проекте
// NuGet: Selenium.WebDriver.IEDriver - по такому запросу можно найти последнюю версию библиотеки
using OpenQA.Selenium.IE; //прописываем в общий код
IWebDriver driver = new InternetExplorerDriver(); //объявлем драйвер в проекте
// NuGet: Selenium.WebDriver.EdgeDriver - по такому запросу можно найти последнюю версию библиотеки
using OpenQA.Selenium.Edge; //прописываем в общий код
IWebDriver driver = new EdgeDriver(); //объявлем драйвер в проекте
C#:
Это инструменты для поиска нужного элемента на веб странице(типа XPath, только их больше).
this.driver.FindElement(By.ClassName("className")); //поиск элемента по имени класса
this.driver.FindElement(By.CssSelector("css")); //поиск элемента по css
this.driver.FindElement(By.Id("id")); //поиск элемента по id
this.driver.FindElement(By.LinkText("text")); //поиск элемента тексту
this.driver.FindElement(By.Name("name")); //поиск элемента по имени
this.driver.FindElement(By.PartialLinkText("pText")); //поиск элемента по части текста
this.driver.FindElement(By.TagName("input")); //поиск элемента по тэгу
this.driver.FindElement(By.XPath("//*[@id='editor']")); //поиск элемента по XPath,
IReadOnlyCollection<IWebElement> anchors = this.driver.FindElements(By.TagName("a")); // Найти несколько элементов
var div = this.driver.FindElement(By.TagName("div")).FindElement(By.TagName("a")); // Поиск элемента внутри другого
C#:
IWebElement element = driver.FindElement(By.Id("id")); //объявление и поиск элемента, аналог HtmlElement
element.Click(); //клик по элементу
element.SendKeys("someText"); //ввести текст в форму
element.Clear(); //очистить форму
element.Submit(); //нажать на кнопку
string innerText = element.Text; //выбрать текст элемента
bool isEnabled = element.Enabled; //проверка включен ли элемент
bool isDisplayed = element.Displayed; //проверка отображения элемента
bool isSelected = element.Selected; //проверка выбран ли элемента
SelectElement select = new SelectElement(element); //работа со списком
select.SelectByIndex(1); //выбор первого элемента в списке
select.SelectByText("Ford"); //выбор элемента по названию
select.SelectByValue("ford"); //выбор элемента по значению
select.DeselectAll(); //отмена выбора всех элементов
select.DeselectByIndex(1); //отмена выбора первого элемента в списке
select.DeselectByText("Ford"); //отмена выбора
select.DeselectByValue("ford"); //отмена выбора
IWebElement selectedOption = select.SelectedOption;
IList<IWebElement> allSelected = select.AllSelectedOptions; //список всех элементов, удовлетворяющих запросу
bool isMultipleSelect = select.IsMultiple; //выбор множества элементов
C#:
// Перетягивание элемента в нужное поле (Drag&Drop)
IWebElement element = driver.FindElement(By.XPath("//*[@id='project']/p[1]/div/div[2]"));
Actions move = new Actions(driver);
move.DragAndDropToOffset(element, 30, 0).Perform();
// Как проверить видимость элемента
Assert.IsTrue(driver.FindElement(By.XPath("//*[@id='tve_editor']/div")).Displayed);
// Загрузка файла с локального компа
IWebElement element = driver.FindElement(By.Id("RadUpload1file0"));
String filePath = @"D:WebDriver.Series.TestsWebDriver.xml";
element.SendKeys(filePath);
// Прокрутка фокуса страницы
IWebElement link = driver.FindElement(By.PartialLinkText("Previous post"));
string js = string.Format("window.scroll(0, {0});", link.Location.Y);
((IJavaScriptExecutor)driver).ExecuteScript(js);
link.Click();
// Сделать скриншот элемента
IWebElement element = driver.FindElement(By.XPath("//*[@id='tve_editor']/div"));
var cropArea = new Rectangle(element.Location, element.Size);
var bitmap = bmpScreen.Clone(cropArea, bmpScreen.PixelFormat);
bitmap.Save(fileName);
// Фокус на элементе управления
IWebElement link = driver.FindElement(By.PartialLinkText("Previous post"));
// Ожидание видимости элемента
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
wait.Until(ExpectedConditions.VisibilityOfAllElementsLocatedBy(
By.XPath("//*[@id='tve_editor']/div[2]/div[2]/div/div")));
C#:
// Переход на страницу
this.driver.Navigate().GoToUrl(@"http://google.com");
// Получение названия (Title) страницы
string title = this.driver.Title;
// Получение текущего url страницы
string url = this.driver.Url;
// Получение HTML текущей страницы (DOM модель)
string html = this.driver.PageSource;
// Закрыть браузер после окончания работы
driver.Quit();
C#:
// Обработка JavaScript всплывающих окон
IAlert a = driver.SwitchTo().Alert(); //объявление
a.Accept(); //разрешить окно
a.Dismiss(); //запретить окно
// Переключение между окнами браузера, вкладками
ReadOnlyCollection<string> windowHandles = driver.WindowHandles;
string firstTab = windowHandles.First();
string lastTab = windowHandles.Last();
driver.SwitchTo().Window(lastTab);
// Журнал переходов
this.driver.Navigate().Back(); //возврат на предыдущую страницу
this.driver.Navigate().Refresh(); //перезагрузка текущей страницы
this.driver.Navigate().Forward(); //вперед на страницу
// Операции с JavaScript
link.SendKeys(string.Empty);
((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].focus();", link);
// Максимальный размер окна браузера
this.driver.Manage().Window.Maximize();
// Дбавить новые cookie
Cookie cookie = new OpenQA.Selenium.Cookie("key", "value");
this.driver.Manage().Cookies.AddCookie(cookie);
// Получить все cookies из страницы
var cookies = this.driver.Manage().Cookies.AllCookies;
// Удалить cookie по имени
this.driver.Manage().Cookies.DeleteCookieNamed("CookieName");
// Удалить все cookies
this.driver.Manage().Cookies.DeleteAllCookies();
//Сделать снимок всего экрана
Screenshot screenshot = ((ITakesScreenshot)driver).GetScreenshot();
screenshot.SaveAsFile(@"pathToImage", ImageFormat.Png);
// Подождите, пока страница не будет полностью загружена с помощью JavaScript
WebDriverWait wait = new WebDriverWait(this.driver, TimeSpan.FromSeconds(30));
wait.Until((x) =>
{
return ((IJavaScriptExecutor)this.driver).ExecuteScript("return document.readyState").Equals("complete");
});
// Переключение фреймов
this.driver.SwitchTo().Frame(1);
this.driver.SwitchTo().Frame("frameName");
IWebElement element = this.driver.FindElement(By.Id("id"));
this.driver.SwitchTo().Frame(element);
// Переключение на вкладку по умолчанию
this.driver.SwitchTo().DefaultContent();
C#:
// Использовать определенный профиль Firefox
FirefoxProfileManager profileManager = new FirefoxProfileManager();
FirefoxProfile profile = profileManager.GetProfile("HARDDISKUSER");
IWebDriver driver = new FirefoxDriver(profile);
// Установить HTTP прокси в Firefox
FirefoxProfile firefoxProfile = new FirefoxProfile();
firefoxProfile.SetPreference("network.proxy.type", 1);
firefoxProfile.SetPreference("network.proxy.http", "myproxy.com");
firefoxProfile.SetPreference("network.proxy.http_port", 3239);
IWebDriver driver = new FirefoxDriver(firefoxProfile);
// Установить HTTP прокси в Chrome
ChromeOptions options = new ChromeOptions();
var proxy = new Proxy();
proxy.Kind = ProxyKind.Manual;
proxy.IsAutoDetect = false;
proxy.HttpProxy =
proxy.SslProxy = "127.0.0.1:3239";
options.Proxy = proxy;
options.AddArgument("ignore-certificate-errors");
IWebDriver driver = new ChromeDriver(options);
// Принимать все сертификаты Firefox
FirefoxProfile firefoxProfile = new FirefoxProfile();
firefoxProfile.AcceptUntrustedCertificates = true;
firefoxProfile.AssumeUntrustedCertificateIssuer = false;
IWebDriver driver = new FirefoxDriver(firefoxProfile);
// Принимать все сертификаты Chrome
DesiredCapabilities capability = DesiredCapabilities.Chrome();
Environment.SetEnvironmentVariable("webdriver.chrome.driver", "C:PathToChromeDriver.exe");
capability.SetCapability(CapabilityType.AcceptSslCertificates, true);
IWebDriver driver = new RemoteWebDriver(capability);
// Установить параметры options.
ChromeOptions options = new ChromeOptions();
DesiredCapabilities dc = DesiredCapabilities.Chrome();
dc.SetCapability(ChromeOptions.Capability, options);
IWebDriver driver = new RemoteWebDriver(dc);
// Выключить JavaScript в Firefox
FirefoxProfileManager profileManager = new FirefoxProfileManager();
FirefoxProfile profile = profileManager.GetProfile("HARDDISKUSER");
profile.SetPreference("javascript.enabled", false);
IWebDriver driver = new FirefoxDriver(profile);
// Установить тайм-аут загрузки страницы по умолчанию
driver.Manage().Timeouts().SetPageLoadTimeout(new TimeSpan(10));
// Запустить Firefox с плагинами
FirefoxProfile profile = new FirefoxProfile();
profile.AddExtension(@"C:extensionsLocationextension.xpi");
IWebDriver driver = new FirefoxDriver(profile);
// Запустить Chrome с распакованным расширением
ChromeOptions options = new ChromeOptions();
options.AddArguments("load-extension=/pathTo/extension");
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.SetCapability(ChromeOptions.Capability, options);
DesiredCapabilities dc = DesiredCapabilities.Chrome();
dc.SetCapability(ChromeOptions.Capability, options);
IWebDriver driver = new RemoteWebDriver(dc);
//Запустить Chrome с упакованным расширением
ChromeOptions options = new ChromeOptions();
options.AddExtension(Path.GetFullPath("localpathto/extension.crx"));
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.SetCapability(ChromeOptions.Capability, options);
DesiredCapabilities dc = DesiredCapabilities.Chrome();
dc.SetCapability(ChromeOptions.Capability, options);
IWebDriver driver = new RemoteWebDriver(dc);
// Изменить расположение сохранения файлов по умолчанию
String downloadFolderPath = @"c:temp";
//Работа с настройками профиля Firefox
FirefoxProfile profile = new FirefoxProfile();
profile.SetPreference("browser.download.folderList", 2);
profile.SetPreference("browser.download.dir", downloadFolderPath);
profile.SetPreference("browser.download.manager.alertOnEXEOpen", false);
profile.SetPreference("browser.helperApps.neverAsk.saveToDisk",
"application/msword, application/binary, application/ris, text/csv, image/png, application/pdf,
text/html, text/plain, application/zip, application/x-zip, application/x-zip-compressed, application/download,
application/octet-stream");
this.driver = new FirefoxDriver(profile);
C#:
Путем определения опций браузера можно включить/отключить различные настройки
var options = new ChromeOptions(); // объявление опций драйвера
options.AddArgument("--headless"); //headless-режим, то есть без создания
визуального окна браузера(интерфейса пользователя), проект работает,
черное окно драйвера откроется и в нем идет логирование, а браузера не видно.
options.AddArgument("--ignore-certificate-errors"); //игнорировать ошибки сертификатов
options.AddArgument("--disable-popup-blocking"); //запрет блокировщика всплывающих окон
options.AddArgument("--incognito"); //работа браузера в режиме инкогнито
options.addArguments("--window-size=1920,1080"); //размер окна браузера
options.addArguments("--disable-default-apps"); //отключить установленные расширения
Теперь перейдем непосредственно к примерам - как это всё использовать. Для начала работы нужно создать кубик C# в проекте и прописать код.
Поиск в Google
C#:
string pathDr = project.Directory; //директория проекта
var driverpath = @"D:\selenium"; //место нахождения webdriver'a
var driver = new ChromeDriver(driverpath); //объявление webdriver'a и его местоположения
ChromeOptions chromeOptions = new ChromeOptions(); //объявление настроек webdriver'a
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(3)); //время ожидания действия
driver.Navigate().GoToUrl("https://www.google.com/"); //переход на страницу
driver.FindElement(By.Name("q")).SendKeys("арбуз" + Keys.Enter); //находит строку поиска, вводит текст, жмет Enter
driver.Quit(); //закрывает браузер
В этом примере открывается окно браузера, вводится в форму поиска слово cheese, нажимается ввод и показывает страницу с результатами поиска.
Чтобы браузер не закрылся, надо закомментировать последнюю строку.
Парсер поиска zennolab
C#:
string pathDr = project.Directory; //директория проекта
var driverpath = @"D:\selenium"; //место нахождения webdriver'a
var driver = new ChromeDriver(driverpath); //объявление webdriver'a и его местоположения
ChromeOptions chromeOptions = new ChromeOptions(); //объявление настроек webdriver'a
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5)); //время ожидания действия
driver.Url = @"https://zennolab.com/discussion/"; //переход на страницу
driver.FindElement(By.Name("keywords")).SendKeys("selenium" + Keys.Enter); //находит строку поиска, вводит текст, жмет Enter
var links = driver.FindElements(By.XPath(".//h3/a")); //поиск коллекции заголовков выдачи
foreach (var link in links){//перебор и выдача в лог заголовков статей и ссылок на них
string xxx = String.Format("{0} - {1}", link.Text, link.GetAttribute("href"));//
project.SendInfoToLog(xxx);
}
driver.Close(); //закрытие браузера
Здесь открываем браузер, вводим в форму поиска слово selenium, нажимаем ввод и показывает страницу с результатами поиска.
Затем собираем коллекцию элементов и путём перебора получаем названия статей в выдачи и ссылки на них.
Работа с Facebook
C#:
var driverpath = @"D:\selenium";
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.AddArgument("-incognito");//режим инкогнито браузера, включил, ибо из-за всплывающих окна выдавало ошибку
var driver = new ChromeDriver(driverpath, chromeOptions);
driver.Manage().Cookies.DeleteAllCookies();//очистка кук перед входом на страницу
driver.Url = "http://www.facebook.com/";
driver.Manage().Window.Maximize();
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(15));
driver.FindElement(By.Id("email")).SendKeys("LOGIN");//ваш логин FB
driver.FindElement(By.Id("pass")).SendKeys("PASSWORD" + Keys.Enter);//ваш пароль FB
driver.FindElement(By.XPath(".//ul/li/div[@data-visualcompletion='ignore-dynamic'][1]")).Click();
driver.FindElement(By.XPath("//a[contains(text(), 'Friends')]")).Click();
IList<IWebElement> friends = driver.FindElements(By.XPath(".//a[@role='link']/span[@dir='auto']"));
project.SendInfoToLog("Всего друзей :" + friends.Count); //количество ваших друзей в Facebbok
//Ниже код выводит имена друзей, но иногда глючит, поэтому я его отключил
// for (int i = 0; i < friends.Count; i++)
// {
// project.SendInfoToLog(friends[i].Text);
// Thread.Sleep(1000);
// }
driver.Close();
[COLOR=rgb(0, 0, 0)][SPOILER="Скриншот окна браузера"][/SPOILER][/COLOR]
Теперь переходим на Facebook, авторизуемся (нужно вввести данные), переходим в профиль, на вкладку Друзья и считаем их количество.
Скриншот окна браузера
C#:
ChromeOptions options = new ChromeOptions();
string file = @"D:\" + @"image.png"; //папка для сохранения скриншота и название файла
var driverpath = @"D:\selenium\";
var driver = new ChromeDriver(driverpath, options);
driver.Manage().Window.Size = new System.Drawing.Size(1024, 768); //ставим размер окна браузера
driver.Navigate().GoToUrl("https://www.zennolab.com/");
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));
Screenshot image = ((ITakesScreenshot)driver).GetScreenshot(); //делаем скриншот окна
image.SaveAsFile(file, ImageFormat.Png); //сохранение скриншот с указанным расширением
driver.Quit();
Комбинируя эти примеры можно создать регер, парсер, постер с человекоподобными повадками.
Теперь я покажу, зачем мне понадобился Selenium.
Мне было нужно спарсить базу американского колледжа Goshen College - имена и email студентов и преподавателей.
На запросах было лень делать, а на web пошли глюки - не находилась инфа и показывало ошибки.
А все проблемы получились из-за фреймов и JS-скриптов.
Решил попробовать Selenium.
Парсер Goshen
C#:
string pathDr = project.Directory;
var driverpath = @"D:\selenium";
ChromeOptions chromeOptions = new ChromeOptions();
var driver = new ChromeDriver(driverpath, chromeOptions);
driver.Manage().Cookies.DeleteAllCookies();//чистим куки перед вводом нового имени
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));
chromeOptions.AddArgument("disable-infobars");
chromeOptions.AddArgument("--disable-extensions"); //отключаем расширения браузера
chromeOptions.AddArgument("--disable-notifications"); //отключаем уведомления
chromeOptions.AddArgument("disable-geolocation"); //отключаем геолокацию
string pathFileOut = project.Directory + @"\students.xlsx"; //сохранение результатов
string resurl = String.Empty;
string lstTemp = String.Empty;
IZennoList List = project.Lists["List"]; //список имён для ввода в поиск
IZennoTable tblResult = project.Tables["tblResult"]; //таблица с результатами парсинга
Random rnd = new Random();
if(!File.Exists(pathFileOut))
{
File.AppendAllText(pathFileOut, "Name;Email" + Environment.NewLine, Encoding.UTF8);
}
for (int i = 0; i < List.Count; i++)
{
lstTemp = List[0]; //берём первое имя из списка
driver.Url = "https://www.goshen.edu/search-people/";
Thread.Sleep(500);
project.SendInfoToLog("Сформировали ссылку для парсинга: " + driver.Url + lstTemp, true);
List.RemoveAt(0); // удаляем взятое имя
driver.FindElement(By.XPath(@".//input[@name='person']")).SendKeys(lstTemp);
Thread.Sleep(rnd.Next(500,700));
driver.FindElement(By.XPath(@".//form[@class='search-form']//button[@type='submit']")).Click();
Thread.Sleep(rnd.Next(200,300));
var col = driver.FindElements(By.XPath(@".//div[@class='contact__info']"));
Thread.Sleep(rnd.Next(200,300));
if(col == null)
{
project.SendErrorToLog("Не найдено ни одной персоны, перезагружаемся", true);
continue;
}
project.SendInfoToLog("Количество людей на странице: " + col.Count.ToString());
Thread.Sleep(rnd.Next(300,500));
foreach (var value in col){ //IWebElement
string strText = String.Format("{0}", value.Text);
project.SendInfoToLog(strText);
if(strText == "") continue; //если пустая выдача, всё сначала
string Name = strText.Split('\r')[0];
project.SendInfoToLog(Name);
string Email = Regex.Match(strText, @"(\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)").Value;
project.SendInfoToLog(Email);
string[] arrRow = new string[] { Name, Email };
string line = String.Format("{0};{1}", Name, Email);
project.SendInfoToLog(line, true);
tblResult.AddRow(arrRow); //добавляем результаты в таблицу
}
}
driver.Close();
return "stop";
Настройки простые - указываем список с наиболее распространенными английскими именами.
Они по очереди вставляются в поле поиска, если выдача с таким именем есть - страница парсится, затем имя удаляется и так далее.
Списки мужских и женских популярных имён прилагаются, а также список фамилий.
После окончания сбора дубли надо чистить.
Скажу что Selenium отработал довольно шустро в один поток (многопоточность не работает) без ошибок.
На самом деле проектов было 2, но во 2-м я пока не победил пагинацию.
Полагаю, метод использования Selenium в связке с Zennoposter вполне имеет право на жизнь.
Надеюсь, что эта статья пригодится кому-нибудь в работе. Успехов!
P.S.
Для начала работы файлы из архива selenium.rar с вебдрайверами разаархивируйте в любую папку - у меня D:\selenium
Из архивов examples.rar и parser.rar библиотеки скопируйте в ExternalAssemblies и добавьте в GAC, в общем коде уже всё прописано.
Всё запускалось на версии 5.47.0.0 без проблем.
Вложения
Для запуска проектов требуется программа ZennoPoster.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...
Для того чтобы запустить шаблон, откройте программу ZennoPoster. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.
Последнее редактирование:




