Selenium, как удобное дополнение к ZennoPoster

soprano

Client
Регистрация
25.08.2011
Сообщения
779
Благодарностей
808
Баллы
93
В статье я хочу поделиться опытом использования Selenium в проекте на ZennoPoster по сбору email.

Сначала краткая информация - что такое 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(); //закрывает браузер

69163


В этом примере открывается окно браузера, вводится в форму поиска слово 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(); //закрытие браузера

69164


Здесь открываем браузер, вводим в форму поиска слово 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]

69165


Теперь переходим на 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";

Настройки простые - указываем список с наиболее распространенными английскими именами.
69166


Они по очереди вставляются в поле поиска, если выдача с таким именем есть - страница парсится, затем имя удаляется и так далее.
Списки мужских и женских популярных имён прилагаются, а также список фамилий.
После окончания сбора дубли надо чистить.

69168


Скажу что Selenium отработал довольно шустро в один поток (многопоточность не работает) без ошибок.
На самом деле проектов было 2, но во 2-м я пока не победил пагинацию.

Полагаю, метод использования Selenium в связке с Zennoposter вполне имеет право на жизнь.

Надеюсь, что эта статья пригодится кому-нибудь в работе. Успехов!

P.S.
Для начала работы файлы из архива selenium.rar с вебдрайверами разаархивируйте в любую папку - у меня D:\selenium
Из архивов examples.rar и parser.rar библиотеки скопируйте в ExternalAssemblies и добавьте в GAC, в общем коде уже всё прописано.

Всё запускалось на версии 5.47.0.0 без проблем.
 

Вложения

Для запуска проектов требуется программа ZennoPoster.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...

Для того чтобы запустить шаблон, откройте программу ZennoPoster. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.

Последнее редактирование:

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 676
Баллы
113
Интересненнько.
Было бы еще интереснее если бы многопоток работал :-)

В какой версии зенки не открывался этот сайт ? щас попробовал на 7.2.1.1, на хроме, все данные можно спарсить.
 

soprano

Client
Регистрация
25.08.2011
Сообщения
779
Благодарностей
808
Баллы
93
Многопоток в Selenium не работает. Надо открывать много версий одного шаблона - будет имитация многопотока.
Сайт в web показывал ошибки, я долго не парился и попробовал Selenium.
Можно и запросы и web было сделать, но колледж небольшой и база с него небольшая, так что хоть Selenium немного освоил.
 

Oleg1987

Client
Регистрация
11.08.2014
Сообщения
1 169
Благодарностей
744
Баллы
113

soprano

Client
Регистрация
25.08.2011
Сообщения
779
Благодарностей
808
Баллы
93

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 676
Баллы
113
Сайт в web показывал ошибки, я долго не парился и попробовал Selenium.
а... ну на скринах 5-я версия зенки и движок файрфокс на скринах увидел.
ну да, тогда на веб могут быть ошибки, так то файрфокс устаревший уже, да и 5-ка даже по хрому уже не обновляется.
так то прикольный способ перейти на движок хрома, через селениум :-)
ну а чо ? маркетологи в зеннолабе если плохо доносят до пользователей новый функционал, то пользователи начинают рыскать из-стороны в сторону :-)
 

soprano

Client
Регистрация
25.08.2011
Сообщения
779
Благодарностей
808
Баллы
93
маркетологи в зеннолабе если плохо доносят до пользователей новый функционал, то пользователи начинают рыскать из-стороны в сторону :-)
Не то чтобы плохо, просто я так и не понял отличия между 5-й и 7-й версиями, кроме интерфейса и разных расширений шаблонов. Надо баттл какой между версиями устроить или ..конкурс.
 
  • Спасибо
Реакции: avtostopshik

sergio197675

Client
Регистрация
21.09.2019
Сообщения
360
Благодарностей
317
Баллы
63
спасибо за ликбез! почему не в конкурсных?)
 

sergio197675

Client
Регистрация
21.09.2019
Сообщения
360
Благодарностей
317
Баллы
63
Не то чтобы плохо, просто я так и не понял отличия между 5-й и 7-й версиями, кроме интерфейса и разных расширений шаблонов. Надо баттл какой между версиями устроить или ..конкурс.
я , например перешёл на семёрку из за удобства работы с запросами- быстрее составлять из монитора трафика стало
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 676
Баллы
113
Не то чтобы плохо, просто я так и не понял отличия между 5-й и 7-й версиями, кроме интерфейса и разных расширений шаблонов. Надо баттл какой между версиями устроить или ..конкурс.
Да что там сравнивать, 5-ка уже перестается фиксится. если глянуть в баг трекере то прям так и пишут , исправлено для 7.3.1.0. и в одном баге прямым текстом ответили что в 5-ке этот баг не будет исправлен. В релизе к новым версиям тоже недавно писали, что хром перестали обновлять на 5-ке.
Поэтому нет смысла сидеть на 5-ке, так как в 7-ке давно уже больше фиксов багов и больше новых фич, таких как тач например или xpath в кубиках.
да и переходить тоже легко. я вот например вообще с 7.1.2.0 перешел на 7.2.0. ну пришлось подшаманить шаблоны, зато щас работают как и прежде. а если шаблоны работают на близнеце версии в 5-ке, то там вообще минимум будет отладки.
 
  • Спасибо
Реакции: soprano

Norim

Client
Регистрация
17.10.2017
Сообщения
291
Благодарностей
53
Баллы
28
А какую роль тогда во всем этом играет ZennoPoster?
Только для запуска селениума))) На данный момент им можно обходить некоторые антибот системы, которые непосильны для зеннопостера.
 
Регистрация
05.06.2019
Сообщения
570
Благодарностей
451
Баллы
63
Однозначно, за вклад (жирный) +, отличное оформление! Спасибо!
 
  • Спасибо
Реакции: 606 и soprano

AZANIR

Client
Регистрация
09.06.2014
Сообщения
405
Благодарностей
196
Баллы
43
отличная подача , хороший материал.
 
  • Спасибо
Реакции: 606

andrey-ka

Client
Регистрация
03.06.2018
Сообщения
854
Благодарностей
246
Баллы
43
Интересно. А как реализовать сохранение профилей с последующей их загрузкой?
 

soprano

Client
Регистрация
25.08.2011
Сообщения
779
Благодарностей
808
Баллы
93
Профиль можно загрузить из опций
C#:
options.addArguments("profile-directory=Profile_NEW")
или
C#:
FirefoxProfileManager profileManager = new FirefoxProfileManager();
FirefoxProfile profile = profileManager.GetProfile("Profile_NEW ");
IWebDriver driver = new FirefoxDriver(profile);
А сохранить профиль можно так

Подготовка профиля Firefox
  • Закрыть все запущенные приложения Firefox
  • Запустить командную строку Run(Выполнить) и выполнить: firefox.exe –p
  • Создать новый профайл, назвать его Webdriver
  • Запустить браузер пользователем Webdriver и настроить необходимые параметры браузера
Должно работать.
 
  • Спасибо
Реакции: ex3maL

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 676
Баллы
113

soprano

Client
Регистрация
25.08.2011
Сообщения
779
Благодарностей
808
Баллы
93
Так отличие между браузерами - какой драйвер используется geckodriver.exe (Firefox) или chromedriver.exe(Chrome), т.е. слово Firefox заменяется на Chrome в коде и всё работает дальше.
 
  • Спасибо
Реакции: Phoenix78

radv

Client
Регистрация
11.05.2015
Сообщения
3 636
Благодарностей
1 845
Баллы
113
а если нету лисы ? только хром например есть в системе.
Селениум может работать с хромом и файрфоксом через спецдрайверы управления этими браузерами. Для хрома свой драйвер, для лисы свой. И методы аналогичные.
 
  • Спасибо
Реакции: Phoenix78

Artemka

Client
Регистрация
21.12.2015
Сообщения
43
Благодарностей
8
Баллы
8
Автор молодец! Отличная статья.
 
  • Спасибо
Реакции: soprano

alex888

Client
Регистрация
13.10.2013
Сообщения
105
Благодарностей
38
Баллы
28
спасибо, отличная статья, а почему не в конкурсе? я бы проголосовал за вас, очень полезный материал
 

Geograph

Client
Регистрация
16.02.2014
Сообщения
209
Благодарностей
113
Баллы
43
Selenium - бесплатная, урезанная альтернатива ЗенноПостеру, его есть смысл использовать, если например пишешь на C# и у тебя нет зенки. В ином случае это мучения и костыли
 

soprano

Client
Регистрация
25.08.2011
Сообщения
779
Благодарностей
808
Баллы
93
спасибо, отличная статья, а почему не в конкурсе? я бы проголосовал за вас, очень полезный материал
Предлагал на конкурс, отказали как не соответствующую тематике. Пришлось другую статью отправить.
 
  • Спасибо
Реакции: molotok

molotok

Client
Регистрация
17.04.2015
Сообщения
733
Благодарностей
358
Баллы
63
Это может подойти когда браузер зенки палят сайты по отпечаткам?
Запускать селениум и работать в браузере используя зеннопостер и запрсы с куками из браузера (на селениуме).
 

soprano

Client
Регистрация
25.08.2011
Сообщения
779
Благодарностей
808
Баллы
93
Это может подойти когда браузер зенки палят сайты по отпечаткам?
Запускать селениум и работать в браузере используя зеннопостер и запрсы с куками из браузера (на селениуме).
Все возможности я еще не испробовал, но на Selenium можно обходить cloudflare и даже reCaptcha.
Запросы с куками можно использовать, если заранее сохранить профиль.
 
  • Спасибо
Реакции: molotok

Norim

Client
Регистрация
17.10.2017
Сообщения
291
Благодарностей
53
Баллы
28
Все возможности я еще не испробовал, но на Selenium можно обходить cloudflare и даже reCaptcha.
Запросы с куками можно использовать, если заранее сохранить профиль.
Можно ничего не сохранять , а получить куки через js в переменную. Ну а дальше уже заюзать их в запросах.
 
  • Спасибо
Реакции: soprano

aleksa77

Client
Регистрация
30.09.2011
Сообщения
914
Благодарностей
90
Баллы
28
With Selenium we can avoid problems with Spotify, then manage browser extensions and more, VladZen , what you think, is possible this great modification to be some official, it can be an optional in future great feature, with Selenium we can work easy and with Cameleo and we can have freedom for a lot other options what can not do with integrated browser ?
 
  • Спасибо
Реакции: todayer

ezotonal

Client
Регистрация
13.01.2014
Сообщения
808
Благодарностей
227
Баллы
43
Все возможности я еще не испробовал, но на Selenium можно обходить cloudflare и даже reCaptcha.
Запросы с куками можно использовать, если заранее сохранить профиль.
А что за библиотека такая SeleniumProxyAutentication.dll
 

soprano

Client
Регистрация
25.08.2011
Сообщения
779
Благодарностей
808
Баллы
93

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 263
Баллы
113
Для простого парсинга селениум норм, а вот как появляется рекапча - то всё. Гугл выдаёт ему всегда самую сложную капчу
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)