- Регистрация
- 25.08.2011
- Сообщения
- 866
- Благодарностей
- 948
- Баллы
- 93
В статье я хочу поделиться опытом использования 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 без проблем.
Вложения
-
1 МБ Просмотры: 482
-
1,2 МБ Просмотры: 392
-
22,4 МБ Просмотры: 461
Для запуска проектов требуется программа ZennoPoster.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...
Для того чтобы запустить шаблон, откройте программу ZennoPoster. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.
Последнее редактирование: