Небольшой парсер для эфир кошельков при помощи zapper.fi Первый проект, шарп в целом учу ток 3 дня, решил попробовать себя. Сеньоры - прошу вас не кидаться палками, а лучше понять и простить меня за плохой код Лучше подскажите, что можно было сделать лучше. Как вариант брать строки - парсить username twitter аккаунтов, собсна как я и делал ПРЕВЬЮ Скомпилированный парсер https://drive.google.com/file/d/161C7ynhSr3lHYUubUyYR5DRCYL5bvBC-/view?usp=sharing Do29(1@k54jan& Как пользоваться скомпилированным парсером? Сначала вводим путь до файла с юзернеймами Пример: C:\Users\кринжик\Desktop\file.txt Затем вводим путь к результатам Пример: C:\Users\кринжик\Desktop\result.txt VT https://www.virustotal.com/gui/file/67352638d5ff28f0bcd56553026459a36169b1eabd5e0926240bda863d7935e9 Исходник проекта: using System; using System.IO; using OpenQA.Selenium; using OpenQA.Selenium.Chrome; using System.Text; namespace SeleniumParser { internal class Program { static void Main(string[] args) { var driver = new ChromeDriver(); // Создание и запуск веб-драйвера хром. System.Threading.Thread.Sleep(5000); // Ожидание перед вводом пути к файлу. Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("\n\nEnter file path"); // Вывод строки с запросом ввести путь к файлу с юзернеймами. string _path = Console.ReadLine(); // Ввод пути файла. System.Threading.Thread.Sleep(5000); Console.WriteLine("Enter path for checked accounts"); // Вывод строки с запросом ввести путь к файлу с готовыми аккаунтами. string _pathChecked = Console.ReadLine(); // Ввод пути файла. Console.ResetColor(); string[] lines = File.ReadAllLines(_path); // Открытие и считывание файла с юзернеймами. int _howMuchLines = File.ReadAllLines(_path).Length; // Получение кол-ва строк в файле с юзернеймами. Console.WriteLine("Loaded " + _howMuchLines + " lines"); // Вывод кол-ва строк, загруженных в парсер. int set = 0; foreach (string line in lines) // Цикл тела парсера. { try { set++; // Подсчёт кол-ва обработанных строк. Console.WriteLine("Processed " + set + " of " + _howMuchLines + " lines.\n"); // Вывод кол-ва обработанных строк. string _username = line; // Преобразование строки в отдельную переменную _username. Console.WriteLine("Trying to read " + line); // Вывод в консоль текста "Пытаюсь прочитать + содержание строки" driver.Navigate().GoToUrl("https://zapper.fi/account/" + _username + ".eth"); // Открытие страницы с кошельком. System.Threading.Thread.Sleep(2000); // Ожидание загрузки страницы, можете поставить значение больше, если у вас прогружается быстрее. IWebElement _ethAdress = driver.FindElement(By.XPath("/html/body/div[1]/div[2]/div[3]/main/div/div/div[1]/div[2]/div/div[2]/div/div[2]/div")); // Поиск элемента, который содержит баланс по XPath Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine(_ethAdress.Text); // Получение баланса(Если элемент найден) Console.ResetColor(); StreamWriter sw = new StreamWriter(_pathChecked, true, Encoding.ASCII); // Открытие файла с результатами string _accWithBalance = _username + " " + _ethAdress.Text; // Установка переменной, в которой будет записан результат и баланс. sw.WriteLine(_accWithBalance); // Запись строки в файл. sw.Close(); // Закрытие и сохранение файла. } catch (Exception) // "Ловим" ошибку { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Аккаунт не существует / Не удалось спарсить баланс\n"); // Маскируем ошибку из 5 строк в одну и сразу понятную. Console.ResetColor(); } } Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Парсинг закончен."); // Сообщение о окончании парсинга. Console.ResetColor(); } } } C# using System; using System.IO; using OpenQA.Selenium; using OpenQA.Selenium.Chrome; using System.Text; namespace SeleniumParser { internal class Program { static void Main(string[] args) { var driver = new ChromeDriver(); // Создание и запуск веб-драйвера хром. System.Threading.Thread.Sleep(5000); // Ожидание перед вводом пути к файлу. Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("\n\nEnter file path"); // Вывод строки с запросом ввести путь к файлу с юзернеймами. string _path = Console.ReadLine(); // Ввод пути файла. System.Threading.Thread.Sleep(5000); Console.WriteLine("Enter path for checked accounts"); // Вывод строки с запросом ввести путь к файлу с готовыми аккаунтами. string _pathChecked = Console.ReadLine(); // Ввод пути файла. Console.ResetColor(); string[] lines = File.ReadAllLines(_path); // Открытие и считывание файла с юзернеймами. int _howMuchLines = File.ReadAllLines(_path).Length; // Получение кол-ва строк в файле с юзернеймами. Console.WriteLine("Loaded " + _howMuchLines + " lines"); // Вывод кол-ва строк, загруженных в парсер. int set = 0; foreach (string line in lines) // Цикл тела парсера. { try { set++; // Подсчёт кол-ва обработанных строк. Console.WriteLine("Processed " + set + " of " + _howMuchLines + " lines.\n"); // Вывод кол-ва обработанных строк. string _username = line; // Преобразование строки в отдельную переменную _username. Console.WriteLine("Trying to read " + line); // Вывод в консоль текста "Пытаюсь прочитать + содержание строки" driver.Navigate().GoToUrl("https://zapper.fi/account/" + _username + ".eth"); // Открытие страницы с кошельком. System.Threading.Thread.Sleep(2000); // Ожидание загрузки страницы, можете поставить значение больше, если у вас прогружается быстрее. IWebElement _ethAdress = driver.FindElement(By.XPath("/html/body/div[1]/div[2]/div[3]/main/div/div/div[1]/div[2]/div/div[2]/div/div[2]/div")); // Поиск элемента, который содержит баланс по XPath Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine(_ethAdress.Text); // Получение баланса(Если элемент найден) Console.ResetColor(); StreamWriter sw = new StreamWriter(_pathChecked, true, Encoding.ASCII); // Открытие файла с результатами string _accWithBalance = _username + " " + _ethAdress.Text; // Установка переменной, в которой будет записан результат и баланс. sw.WriteLine(_accWithBalance); // Запись строки в файл. sw.Close(); // Закрытие и сохранение файла. } catch (Exception) // "Ловим" ошибку { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Аккаунт не существует / Не удалось спарсить баланс\n"); // Маскируем ошибку из 5 строк в одну и сразу понятную. Console.ResetColor(); } } Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Парсинг закончен."); // Сообщение о окончании парсинга. Console.ResetColor(); } } }
Help, Не особо понял к чему эт тут, я чисто сделал как понравилось мне, хотя и можно было без селениума обойтись, чисто запросами(но мне было очень впадлу это делать по другому)