X-Scripts

Power by humanemulator

НАШИ КОНТАКТЫ:
ICQ My ICQ 625657402: 625657402
Наш скайп: igor_sev2
Email : order@x-scripts.com

Сообщество программистов и манимейкеров


C# исходники программы Сборщик email адресов

Программа Сборщик email адресов это первый наш программный продукт написанный с использованием C# Human Emulator API. Посмотреть описание и скачать инсталятор программы программы можно в этой статье >>.

Описание проекта.

Проект EmailParser написан в Microsoft Visual Studio 2010. Под эту же студию адаптирована и библиотека XHE.dll. Про то как подключать XHE.dll к проекту мы уже писали в статье Скрипты на C# в Human Emulator.

Структура проекта.

Класс MainWnd - главное окно программы. В этом классе прописаны реализация пользовательского интерфейса. Настройки сбора. Запуск/Остановка сбора. Отображение результатов в табличном виде. Сохранение результатов в файл.
Класс Script : XHEScript - класс, в котором прописан весь функционал по работе с Human Emulator. Этот класс унаследован от класса XHEScript из библиотеки XHE.dll.
Класс ThreadTask : BackgroundWorker - класс, который запускает сбор Email адресов в отдельном потоке. Таким образом не блокируется доступ пользователя к главному окну программы.

Пример кода из проекта.

Функция OnDoWork(DoWorkEventArgs e) запускает сбор в отдельном потоке
  protected override void OnDoWork(DoWorkEventArgs e)
        {
            // начальный порт 
            int m_iPort = 7010;
            int i=0;
            int iPercent = 0;

            ReportProgress(iPercent, "Начинаем сбор...");
            // пройдёмся по всем ключам 
            foreach (string sKey in m_sKey)
            {
                // создаём объект класса скрипт
                Script m_Scripts = new Script(mainWnd);
                // логи
                Program.SetLog("Запускаем Human Emulator на порту " + m_iPort.ToString());
                // запускаем Human Emulator на любом свободном порту начиная с 7010
                m_Scripts.RunHuman(ref m_iPort);
                // назовём поток по порту на котором он работает 
                //Thread.CurrentThread.Name = m_iPort.ToString();
                // пауза а заодно и проверка на оставноку потока
                if (PauseAndCheck(3, e, m_Scripts, m_iPort))
                    return;
                // логи
                Program.SetLog("Запустили Human Emulator на порту " + m_iPort.ToString());
                // инициализация объектов Хумана для заданного порта
                m_Scripts.InitXHE(m_iPort);
                // пауза а заодно и проверка на оставноку потока
                if (PauseAndCheck(2, e, m_Scripts, m_iPort))
                    return;
                // задать настроки браузера
                m_Scripts.SetBrowserSettings();
                // пауза а заодно и проверка на оставноку потока
                if (PauseAndCheck(2, e, m_Scripts, m_iPort))
                    return;
                Program.SetLog("Ищем email адреса по ключу: " + sKey.Trim());//+ ". Выполнено " + iPercent.ToString() + "% ");
                //lbCurProg.Text = "Ищем email адреса по ключу: " + lines[i].Trim() + ". Выполнено " + iPercent.ToString() + "% ";
                // запускаем поиск по фразе
                m_Scripts.NavigateSE(sKey, "http://www.google.ru");
                // пауза а заодно и проверка на оставноку потока
                if (PauseAndCheck(2, e, m_Scripts, m_iPort))
                    return;
                // текущая страница поисковой выдачи
                int iCrntPage = 1;
                // глубина переходов в поисковую выдачу
                int iLastPage = Properties.Settings.Default.iPagesCnt;
                // разбор поисковой выдачи 
                while (true)
                {
                    List arrGooglesrp = m_Scripts.GetGoogleSerp(iCrntPage);
                    // System.Windows.Forms.Application.DoEvents();
                    // проверяем получили ли выдачу
                    if (arrGooglesrp == null)
                    {
                        Program.SetLog("Не смогли получить выдачу для страницы " + iCrntPage.ToString());
                    }
                    else
                    {
                        Program.SetLog("Вызываем ParseEmail...");
                        // ищем все email адреса на сайте из выдачи
                        m_Scripts.ParseEmail(arrGooglesrp, mainWnd.arrEmails);
                    }

                    // пауза а заодно и проверка на оставноку потока
                    if (PauseAndCheck(3, e, m_Scripts, m_iPort))
                        return;

                    // выходим из цикла как только не смогли перейти на следующую страницу
                    if (!m_Scripts.NextPage(ref iCrntPage, iLastPage))
                        break;
                }

                // чистим всё и выходим
                //m_Scripts.ClearAndRestart();
                m_Scripts.CloseHuman();
                m_iPort++;

                try
                {
                    // удалим папку с портом 
                    if (Directory.Exists(Properties.Settings.Default.sHumanPath + "\\" + m_iPort.ToString()))
                        Directory.Delete(Properties.Settings.Default.sHumanPath + "\\" + m_iPort.ToString(), true);

                }
                catch
                {
                    Program.SetLog("Ошибка при удалении папки с портом " + Properties.Settings.Default.sHumanPath + "\\" + m_iPort.ToString() + "!");
                }

                
                // вычисляем процент собранного
                double dVal = Convert.ToDouble(i + 1) / Convert.ToDouble(m_sKey.Length) * 100;
                iPercent = Convert.ToInt16(dVal);

                ReportProgress(iPercent, "Идёт сбор...");

                i++;
            }

            Program.SetLog("Сбор закончен!");

            ReportProgress(100, "Готово!");

            return;
        }

Как мы видим код хорошо прокомментарен и будет понятен любому кто знаком с языком C#. Логика работы сбора очень проста. Получив список ключевых фраз из гланого окна программы мы, используя функционал прописанный в классе Script, выполняем в этой функции все необходимые действия для сбора email адресов через Human Emulator. При этом после каждой фразы мы перезапускаем Human Emulator для очистки памяти и затем снова запускаем для следующей фразы, пока не выполним сбор для всего списка фраз. Данный функционал подготовлен для работы во многотопточном режиме. Для этого, на наш взгляд, нужно будет просто разбивать сбор и запускать каждую фразу в своём окне. Но для стабильности работы ограничится 5-тью потоками. На момент написания программы XHE.dll не была адаптирована к запуску во многотопочном режиме, но уже сейчас такая возможность в C# Human Emulator API уже добавлена.
Из наших наблюдений можем отметить тот факт, что при использовании C# Human Emulator API все действия в Human Emulator выполняются намного быстрее, чем при работе аналогичных функций в PHP.

Скачать исходники программы скачено: 1058 раз |

Скачать исходники программы для VS 2015 скачено: 882 раз | Смотреть описание программы



<< Другие программы

Human Emulator Free!
Бесплатная версия программы Human Emulator!
Скачать программу можно тут!