- Дней с нами
- 1.027
- Розыгрыши
- 0
- Сообщения
- 1
- Репутация
- 0
- Реакции
- 0
Здравствуйте, давайте для начала узнаем, что же такое Selenium, обратимся за определением к хабру: "Selenium – это проект, в рамках которого разрабатывается серия программных продуктов с открытым исходным кодом (open source): Selenium WebDriver, Selenium RC, Selenium Server, Selenium Grid, Selenium IDE"
В данной статье мы рассмотрим именно работу с Selenium WebDriver. Selenium WebDriver – это программная библиотека для управления браузерами, проще говоря, для простых смертных - это средство автоматизации браузера, необходимое тестерам, но мы ведь не тестеры, верно? Зачем нам тогда может пригодиться Selenium? Ответ прост - с помощью него мы можем полностью эмулировать человека, а значит писать брутфорсы, чекеры и тому подобное не разбираясь с защитой сайта, ведь нам не потребуется работа с запросами, звучит как сказка, верно? Но даже тут имеются подводные камни, давайте рассмотрим плюсы и минусы селениума
Больше плюсом и минусов я выделить не смог, давайте перейдём к наглядной реализации и демонстрации возможностей Selenium на языке C# (не бросайте читать статью если используете другой ЯП, ведь логика реализации на всех языках одинакова, а методы схожи)
Для демонстрации буду использовать .NET 6.0 и Google Chrome 97.0.4692.71
Первым делом создадим проект и добавим туда через Nuget библиотеку Selenium.WebDriver
После этого нам необходимо добавить драйвер нужного нам браузера, в моём случае гугл хром. Переходим по ссылке https://chromedriver.chromium.org/ и качаем нужную нам версию хром драйвера (она должна соответствовать вашей версии гугл хрома) и перекидываем exe драйвера в папку с нашим проектом, который на данном этапе должен выглядеть так:
Наконец перейдём к коду
В начале нам необходимо подключить некоторые пространства имён
Теперь создадим экземпляр настроек хрома перед запуском
обратившись к объекту option мы можем установить любые аргументы запуска хрома, например сделать хром скрытым
С полным списком аргументов можно ознакомиться тут: https://peter.sh/experiments/chromium-command-line-switches/#reduce-security-for-testing
Кроме аргументом запуска через option мы можем задавать множество других настроек, все они описаны в документации Selenium.WebDriver
Теперь нам необходимо создать объект самого драйвера передать туда настройки(если таковых не имеется оставить скобочки пустыми)
Отлично, теперь нам нужно установить неявное ожидание появления элемента на странице. Зачем это нужно? Дело в том, что наш скрипт работает быстрее чем сайт и поиск элемента на не прогруженной странице выдаст нам ошибку о том, что такого элемента не существует, а используя неявное ожидание мы решаем эту проблему (подробнее о неявном и явном ожидании написано в документации)
Теперь у нас всё готово к описанию списка действий, который должен выполнить наш драйвер. В качестве примера я напишу простенький брут Яндекса.
Для начала отправим наш драйвер на страницу авторизации
Теперь нам необходимо ввести логин и тыкнуть по кнопочке
Сделать это можно благодаря поиску элементов в html, а обратиться к элемент мы можем с помощью: id, cssselector, linktext, tagname, xpath. Я предпочитаю использовать XPath, выглядит он примерно так: //input[contains(@type,'text')] Искать его вы можете либо ручками, либо с помощью специальных расширений, я использую вот это расширение для FireFox
Объясню как пользоваться этим расширением:
1. Ищем нужный нам элемент на сайте
2. Кликаем правой кнопки мыши
3. Кликаем сюда
4. Выбираем подходящий нам икспасник и кликаем на него
5. Копируем из открывшегося окошка
Вернёмся к коду, с помощью XPath мы обращаемся к элементу и задаём ему значение, либо кликаем на него
Мы прошли авторизацию и теперь необходимо узнать сделали это удачно, или же нет
Сделали это через проверку заголовка страницы
Ну... Как бы всё, вся логика брутфорса реализована, осталось сделать обёртку и бежать продавать наш мега-приватный брутфорс
А если серьёзно, то если вы реально решитесь писать брутфорс/авторегер/накрутку на селениум, готовьтесь к долгой и геморной оптимизацией, ведь по дефолту это решение жрёт неимоверное количество ресурсов вашего ПК. Оптимизировать можно, например, через вышеупомянутые option
В данной статье описаны лишь самые необходимые функции Selenium.WebDriver, если вы хотите изучить его подробнее, то рекомендую ознакомить с:
- документацией: https://www.selenium.dev/documentation/webdriver/)
- интересной статьёй, где описано большинство функционала https://wiki.dmdevelopment.ru/wiki/Download/Books/development/selenium-webdriver.pdf
В данной статье мы рассмотрим именно работу с Selenium WebDriver. Selenium WebDriver – это программная библиотека для управления браузерами, проще говоря, для простых смертных - это средство автоматизации браузера, необходимое тестерам, но мы ведь не тестеры, верно? Зачем нам тогда может пригодиться Selenium? Ответ прост - с помощью него мы можем полностью эмулировать человека, а значит писать брутфорсы, чекеры и тому подобное не разбираясь с защитой сайта, ведь нам не потребуется работа с запросами, звучит как сказка, верно? Но даже тут имеются подводные камни, давайте рассмотрим плюсы и минусы селениума
Плюсы:
- - невероятная простота использования
- - лёгкость поддержки софта
- - нет необходимости выстраивать цепочку запросов
- - возможность наглядно наблюдать за тем, что делает ваш софт
- - поддержка кучи языков и платформ (Java, C#, PHP, Ruby, Perl, Python, JavaScript, Objective-C, Haskell, R, Windows, Linux, Mac, Android, iOS, Google Chrome, Internet Explorer, Firefox, Safari, Opera, Microsoft Edge, HtmlUnitDriver)
- - наличие подробной документации(https://www.selenium.dev/documentation/webdriver/)
- - возможность полной имитации действий пользователя
- - жрёт кучу ресурсов
- - гораздо медленнее запросов
- - гугл научился с этим бороться (но не полностью )
- - наличие прямой зависимости версии браузера от версии драйвера
Больше плюсом и минусов я выделить не смог, давайте перейдём к наглядной реализации и демонстрации возможностей Selenium на языке C# (не бросайте читать статью если используете другой ЯП, ведь логика реализации на всех языках одинакова, а методы схожи)
Для демонстрации буду использовать .NET 6.0 и Google Chrome 97.0.4692.71
Первым делом создадим проект и добавим туда через Nuget библиотеку Selenium.WebDriver
В начале нам необходимо подключить некоторые пространства имён
C#:
using OpenQA.Selenium; // пространство имён
using OpenQA.Selenium.Chrome; // пространство имён
Код:
ChromeOptions options = new ChromeOptions(); // экземпляр хром опций
options.PageLoadStrategy = PageLoadStrategy.Normal; // ожидаем нормальной загрузки страниц
Код:
options.AddArgument("--headless");
Кроме аргументом запуска через option мы можем задавать множество других настроек, все они описаны в документации Selenium.WebDriver
Теперь нам необходимо создать объект самого драйвера передать туда настройки(если таковых не имеется оставить скобочки пустыми)
Код:
IWebDriver chrome = new OpenQA.Selenium.Chrome.ChromeDriver(options); // создаём и инициализируем объект драйвера
Код:
chrome.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10); // устанавливаем неявлное ожидание в 10 секунд
Для начала отправим наш драйвер на страницу авторизации
Код:
chrome.Navigate().GoToUrl("https://passport.yandex.ru/"); // направляем наш браузер по ссылке
Объясню как пользоваться этим расширением:
1. Ищем нужный нам элемент на сайте
2. Кликаем правой кнопки мыши
3. Кликаем сюда
4. Выбираем подходящий нам икспасник и кликаем на него
5. Копируем из открывшегося окошка
Код:
chrome.FindElement(By.XPath("//input[contains(@type,'text')]")).SendKeys("t3stselen"); // ищем поле по XPath и устанавливаем ему значение
chrome.FindElement(By.XPath("//button[@data-t='button:action:passp:sign-in'][contains(.,'Войти')]")).Click(); // ищем кнопку "вход" и кликаем по ней
chrome.FindElement(By.XPath("//input[contains(@data-t,'field:input-passwd')]")).SendKeys("t3stselent3stselen"); // ищем поле по XPath и устанавливаем ему значение
chrome.FindElement(By.XPath("//button[@data-t='button:action:passp:sign-in'][contains(.,'Войти')]")).Click(); // ищем кнопку "вход" и кликаем по ней
C#:
Thread.Sleep(1000); // спим 1 секунду
if (chrome.Title == "Яндекс ID") // проверяем заголовк и делаем вывод о валидности
Console.WriteLine("валид");
else
Console.WriteLine("невалид");
Ну... Как бы всё, вся логика брутфорса реализована, осталось сделать обёртку и бежать продавать наш мега-приватный брутфорс
C#:
using OpenQA.Selenium; // простарнство имён
using OpenQA.Selenium.Chrome; // пространство имён
ChromeOptions options = new ChromeOptions(); // экзезмляр хром опций
options.PageLoadStrategy = PageLoadStrategy.Normal; // ожидаем нормальной загрузки страниц
IWebDriver chrome = new OpenQA.Selenium.Chrome.ChromeDriver(options); // создаём и инициализируем объект драйвера
chrome.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10); // устанавливаем неявлное ожидание в 10 секунд
chrome.Navigate().GoToUrl("https://passport.yandex.ru/"); // направляем наш браузер по ссылке
chrome.FindElement(By.XPath("//input[contains(@type,'text')]")).SendKeys("t3stselen"); // ищем поле по XPath и устанавливаем ему значение
chrome.FindElement(By.XPath("//button[@data-t='button:action:passp:sign-in'][contains(.,'Войти')]")).Click(); // ищем кнопку "вход" и кликаем по ней
chrome.FindElement(By.XPath("//input[contains(@data-t,'field:input-passwd')]")).SendKeys("t3stselent3stselen"); // ищем поле по XPath и устанавливаем ему значение
chrome.FindElement(By.XPath("//button[@data-t='button:action:passp:sign-in'][contains(.,'Войти')]")).Click(); // ищем кнопку "вход" и кликаем по ней
Thread.Sleep(1000); // спим 1 секунду
if (chrome.Title == "Яндекс ID") // проверяем заголовк и делаем вывод о валидности
Console.WriteLine("валид");
else
Console.WriteLine("невалид");
А если серьёзно, то если вы реально решитесь писать брутфорс/авторегер/накрутку на селениум, готовьтесь к долгой и геморной оптимизацией, ведь по дефолту это решение жрёт неимоверное количество ресурсов вашего ПК. Оптимизировать можно, например, через вышеупомянутые option
В данной статье описаны лишь самые необходимые функции Selenium.WebDriver, если вы хотите изучить его подробнее, то рекомендую ознакомить с:
- документацией: https://www.selenium.dev/documentation/webdriver/)
- интересной статьёй, где описано большинство функционала https://wiki.dmdevelopment.ru/wiki/Download/Books/development/selenium-webdriver.pdf