Итак, из предыдущей статьи у нас есть следующий скрипт, который регистрирует один аккаунт за один запуск скрипта:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
$xhe_host ="127.0.0.1:7010"; // The following code is required to properly run XWeb Human Emulator require("../../Templates/xweb_human_emulator.php"); $browser->navigate("http://mail.ru/"); $browser->wait_for(60,1); // перейти на страницу регистрации $anchor->click_by_inner_text("Регистрация в почте ",true); $browser->wait_for(); // рандомно выставлять пол аккаунта $gnd=rand(1,2); switch($gnd) { case 1: $gender = "man"; break; case 2: $gender = "woman"; break; } // задать имя $input->set_value_by_number(0,$submitter->generate_random_name("RU",$gender)); // задать фамилию $input->set_value_by_number(1,$submitter->generate_random_second_name("RU",$gender)); // день $listbox->select_random_value_by_number(0); // месяц $listbox->select_random_value_by_number(1); // год $listbox->select_random_value_by_number(2); // выберем пол $radiobox->set_checked_by_value($gnd,true); // логин для почты $mail_login = $submitter->generate_random_nick_name(rand(5,9)).rand(100,10000); // установим сгенерённый логин в поле $input->set_value_by_number(3,$mail_login); // сгенерить пароль для мыла $pwd = $submitter->generate_random_text(rand(7,11),1); // пароль $input->set_value_by_number(4,$pwd); // подтверждение пароля $input->set_value_by_number(5,$pwd); // перейти на заполнение полей без телефона $anchor->click_by_inner_text("У меня нет мобильного телефона",true); $browser->wait_for(); // выберем случайный вопрос $listbox->select_random_value_by_number(5); // заполним поле ответа $ans= $submitter->generate_random_text(rand(5,9),1); $input->set_value_by_number(8,$ans); // зарегистрировать $button->click_by_number(1); $browser->wait_for(); sleep(1); // распознать каптчу тройную каптчу $cap = $app->dlg_captcha_from_url_exactly("http://e.mail.ru/cgi-bin/x_image?num=1",false); $cap1 = $app->dlg_captcha_from_url_exactly("http://e.mail.ru/cgi-bin/x_image?num=2",false); $cap2 = $app->dlg_captcha_from_url_exactly("http://e.mail.ru/cgi-bin/x_image?num=3",false); sleep(1); // задать каптчу $input->set_value_by_name_by_form_number("code",$cap.$cap1.$cap2,11); sleep(1); // закончить с каптчей $button->click_by_number(20); $browser->wait_for(); // Quit $app->quit(); |
Наша задача добавить в скрипт работу с прокси, различные проверки на удачную регистрацию и запись удачных логинов и паролей в файл.
Начнём с прокси. Допустим у нас есть какой то файл с прокси proxy.txt, который лежит в той же папке что и скрипт. Формат файла следующий:
175.145.221.223:3128
202.53.255.68:3128
196.214.70.60:80
180.242.62.150:8088
95.159.29.116:80
186.193.99.222:3128
Добавим в скрипт код для получения данных из файла с проксями в массив $proxies= file(«proxy.txt»); и сразу же создадим цикл, который будет основан на количестве проксей — то есть мы будем регистрировать столько же аккаунтов сколько у нас рабочих проксей в файле, для этого добавим следующий код:
1 2 3 4 5 6 7 8 9 10 |
// цикл пройтись по всем прокси в массиве for($i=0;$i<count($proxies);$i++) { // получить прокси из массива $proxy = $proxies[$i]; // задать прокси браузеру $browser->enable_proxy("all connections",$proxy); // тут будет наш скрипт } |
Примечание: как работать с файлами в XHE описано в статье работа с файлами. Как организовывать циклы описано в статье работа с циклами
В итоге наш скрипт будет выглядеть теперь так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
$xhe_host ="127.0.0.1:7010"; // The following code is required to properly run XWeb Human Emulator require("../../Templates/xweb_human_emulator.php"); // получаем прокси из файла в массив $proxies= file("proxy.txt"); // организовываем цикл на основе массива с проксями for($i=0;$i<count($proxies);$i++) { // получить прокси из массива $proxy = $proxies[$i]; // задать прокси браузеру $browser->enable_proxy("all connections",$proxy); $browser->navigate("http://mail.ru/"); $browser->wait_for(60,1); // перейти на страницу регистрации $anchor->click_by_inner_text("Регистрация в почте ",true); $browser->wait_for(); // рандомно выставлять пол аккаунта $gnd=rand(1,2); switch($gnd) { case 1: $gender = "man"; break; case 2: $gender = "woman"; break; } // задать имя $input->set_value_by_number(0,$submitter->generate_random_name("RU",$gender)); // задать фамилию $input->set_value_by_number(1,$submitter->generate_random_second_name("RU",$gender)); // день $listbox->select_random_value_by_number(0); // месяц $listbox->select_random_value_by_number(1); // год $listbox->select_random_value_by_number(2); // выберем пол $radiobox->set_checked_by_value($gnd,true); // логин для почты $mail_login = $submitter->generate_random_nick_name(rand(5,9)).rand(100,10000); // установим сгенерённый логин в поле $input->set_value_by_number(3,$mail_login); // сгенерить пароль для мыла $pwd = $submitter->generate_random_text(rand(7,11),1); // пароль $input->set_value_by_number(4,$pwd); // подтверждение пароля $input->set_value_by_number(5,$pwd); // перейти на заполнение полей без телефона $anchor->click_by_inner_text("У меня нет мобильного телефона",true); $browser->wait_for(); // выберем случайный вопрос $listbox->select_random_value_by_number(5); // заполним поле ответа $ans= $submitter->generate_random_text(rand(5,9),1); $input->set_value_by_number(8,$ans); // зарегистрировать $button->click_by_number(1); $browser->wait_for(); sleep(1); // распознать каптчу тройную каптчу $cap = $app->dlg_captcha_from_url_exactly("http://e.mail.ru/cgi-bin/x_image?num=1",false); $cap1 = $app->dlg_captcha_from_url_exactly("http://e.mail.ru/cgi-bin/x_image?num=2",false); $cap2 = $app->dlg_captcha_from_url_exactly("http://e.mail.ru/cgi-bin/x_image?num=3",false); sleep(1); // задать каптчу $input->set_value_by_name_by_form_number("code",$cap.$cap1.$cap2,11); sleep(1); // закончить с каптчей $button->click_by_number(20); $browser->wait_for(); } // Quit $app->quit(); |
Теперь добавим проверку и запись удачно зарегистрированного аккаунта в файл. Для записи в файл будем использовать функцию объекта для работы c текстовыми
файлами $textfile->add_string_to_file. Код в скрипте будет $textfile->add_string_to_file($res_file,»$mail_login;$pwd\n»);, где $res_file переменная, которая настраивается в начале скрипта $res_file = «mail_accs.txt»;, а «$mail_login;$pwd\n» это записываемая строка с данными в файл.
Теперь нужно добавить проверку удачной регистрации нового аккаунта. Сразу после удачной регистрации открывается ящик и в верхнем правом углу отображается аккаунт под которым мы зашли. Вот на наличие его на странице мы и будем проверять. Если такая строка есть значит зашли в аккаунт, а значит мы его зарегистрировали. Простой анализ страницы показал, что это span элемент и к тому же с id
1 |
<SPAN id=portal-menu__user-email>rekib2855@mail.ru</SPAN> |
. Это нам даёт возможность использовать функцию объекта $element->get_element_innerText_by_id следующим образом:
1 |
$acc=$element->get_element_innerText_by_id("portal-menu__user-email"); |
Теперь осталась добавить проверку через оператор if. в Результате мы получили:
1 2 3 4 5 6 7 8 9 10 11 12 |
// получаем акк под которым зашли в почту $acc=$element->get_element_innerText_by_id("portal-menu__user-email"); // проверяем на соответствие if($acc==$mail_login."@mail.ru") { // запись в файл удачно зарегистрированного аккаунта $textfile->add_string_to_file($res_file,"$mail_login@mail.ru;$pwd\n",60); } else { echo "не удачная регистрация <br>"; } |
Примечание: команда echo служит для вывода информации в панель отладки.
Теперь наш скрипт выглядит следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
$xhe_host ="127.0.0.1:7010"; // The following code is required to properly run XWeb Human Emulator require("../../Templates/xweb_human_emulator.php"); // получаем прокси из файла в массив $proxies= file("proxy.txt"); // путь к файлу с аккаунтами $res_file = "mail_accs.txt"; // организовываем цикл на основе массива с проксями for($i=0;$i<count($proxies);$i++) { // получить прокси из массива $proxy = $proxies[$i]; // задать прокси браузеру $browser->enable_proxy("all connections",$proxy); $browser->navigate("http://mail.ru/"); $browser->wait_for(60,1); // перейти на страницу регистрации $anchor->click_by_inner_text("Регистрация в почте ",true); $browser->wait_for(); // рандомно выставлять пол аккаунта $gnd=rand(1,2); switch($gnd) { case 1: $gender = "man"; break; case 2: $gender = "woman"; break; } // задать имя $input->set_value_by_number(0,$submitter->generate_random_name("RU",$gender)); // задать фамилию $input->set_value_by_number(1,$submitter->generate_random_second_name("RU",$gender)); // день $listbox->select_random_value_by_number(0); // месяц $listbox->select_random_value_by_number(1); // год $listbox->select_random_value_by_number(2); // выберем пол $radiobox->set_checked_by_value($gnd,true); // логин для почты $mail_login = $submitter->generate_random_nick_name(rand(5,9)).rand(100,10000); // установим сгенерённый логин в поле $input->set_value_by_number(3,$mail_login); // сгенерить пароль для мыла $pwd = $submitter->generate_random_text(rand(7,11),1); // пароль $input->set_value_by_number(4,$pwd); // подтверждение пароля $input->set_value_by_number(5,$pwd); // перейти на заполнение полей без телефона $anchor->click_by_inner_text("У меня нет мобильного телефона",true); $browser->wait_for(); // выберем случайный вопрос $listbox->select_random_value_by_number(5); // заполним поле ответа $ans= $submitter->generate_random_text(rand(5,9),1); $input->set_value_by_number(8,$ans); // зарегистрировать $button->click_by_number(1); $browser->wait_for(); sleep(3); // распознать каптчу тройную каптчу $cap = $app->dlg_captcha_from_url_exactly("http://e.mail.ru/cgi-bin/x_image?num=1",false); $cap1 = $app->dlg_captcha_from_url_exactly("http://e.mail.ru/cgi-bin/x_image?num=2",false); $cap2 = $app->dlg_captcha_from_url_exactly("http://e.mail.ru/cgi-bin/x_image?num=3",false); sleep(1); // задать каптчу $input->set_value_by_name_by_form_number("code",$cap.$cap1.$cap2,11); // закончить с каптчей $button->click_by_number(20); $browser->wait_for(); sleep(3); // получаем аккаунт под которым зашли в почту $acc=$element->get_element_innerText_by_id("portal-menu__user-email"); // проверяем на соответствие if($acc==$mail_login."@mail.ru") { // запись в файл удачно зарегистрированного аккаунта $textfile->add_string_to_file($res_file,"$mail_login@mail.ru;$pwd\n",60); } else { echo "не удачная регистрация <br>"; } } // Quit $app->quit(); |
Если запустить этот скрипт то у нас возникнут проблемы при регистрации второго и последующих аккаунтов так как прежде чем регистрировать новый аккаунт желательно выйти из последнего зареганного аккаунта. К тому же нам нужно ещё менять данные браузера, чистить кэш и менять user-agent строку, можно менять размер браузера и т.д..
Как показала практика работы с хуманом наилучший результат по анонимности и работы с памятью достигается при использовании закладок браузера и последующем их закрытии. Для этого в начало цикла добавим следующий код:
1 2 3 4 |
// задаём количество браузеров $browser->set_count(2); // делаем активный следующим $browser->set_active_browser(1,true); |
Так же до цикла делаем переход основного браузера на пустую страницу: $browser->navigate(‘about:blank’);
В конце цикла добавим следующий код, который будет чистить данные браузера, а потом закрывать открытый в начале скрипта браузер:
1 2 3 4 5 6 7 8 9 |
// чистим данные браузера $browser->clear_cache(); $browser->clear_history(); $browser->clear_cookies("",false); // сделаем активным главный браузер $browser->set_active_browser(0,true); // закрыть все браузеры $browser->close_all_tabs(); |
В итоге наш скрипт стал:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
$xhe_host ="127.0.0.1:7010"; // The following code is required to properly run XWeb Human Emulator require("../../Templates/xweb_human_emulator.php"); // получаем прокси из файла в массив $proxies= file("proxy.txt"); // путь к файлу с аккаунтами $res_file = "mail_accs.txt"; // перейдём на пустую страницу $browser->navigate("about:blank"); $browser->wait_for(60,1); // организовываем цикл на основе массива с проксями for($i=0;$i<count($proxies);$i++) { // задаём количество браузеров $browser->set_count(2); // делаем активный следующим $browser->set_active_browser(1,true); // получить прокси из массива $proxy = $proxies[$i]; // задать прокси браузеру $browser->enable_proxy("all connections",$proxy); $browser->navigate("http://mail.ru/"); $browser->wait_for(60,1); // перейти на страницу регистрации $anchor->click_by_inner_text("Регистрация в почте ",true); $browser->wait_for(); // рандомно выставлять пол аккаунта $gnd=rand(1,2); switch($gnd) { case 1: $gender = "man"; break; case 2: $gender = "woman"; break; } // задать имя $input->set_value_by_number(0,$submitter->generate_random_name("RU",$gender)); // задать фамилию $input->set_value_by_number(1,$submitter->generate_random_second_name("RU",$gender)); // день $listbox->select_random_value_by_number(0); // месяц $listbox->select_random_value_by_number(1); // год $listbox->select_random_value_by_number(2); // выберем пол $radiobox->set_checked_by_value($gnd,true); // логин для почты $mail_login = $submitter->generate_random_nick_name(rand(5,9)).rand(100,10000); // установим сгенерённый логин в поле $input->set_value_by_number(3,$mail_login); // сгенерить пароль для мыла $pwd = $submitter->generate_random_text(rand(7,11),1); // пароль $input->set_value_by_number(4,$pwd); // подтверждение пароля $input->set_value_by_number(5,$pwd); // перейти на заполнение полей без телефона $anchor->click_by_inner_text("У меня нет мобильного телефона",true); $browser->wait_for(); // выберем случайный вопрос $listbox->select_random_value_by_number(5); // заполним поле ответа $ans= $submitter->generate_random_text(rand(5,9),1); $input->set_value_by_number(8,$ans); // зарегистрировать $button->click_by_number(1); $browser->wait_for(); sleep(3); // распознать каптчу тройную каптчу $cap = $app->dlg_captcha_from_url_exactly("http://e.mail.ru/cgi-bin/x_image?num=1",false); $cap1 = $app->dlg_captcha_from_url_exactly("http://e.mail.ru/cgi-bin/x_image?num=2",false); $cap2 = $app->dlg_captcha_from_url_exactly("http://e.mail.ru/cgi-bin/x_image?num=3",false); sleep(1); // задать каптчу $input->set_value_by_name_by_form_number("code",$cap.$cap1.$cap2,11); // закончить с каптчей $button->click_by_number(20); $browser->wait_for(); sleep(3); // получаем акк под которым зашли в почту $acc=$element->get_element_innerText_by_id("portal-menu__user-email"); // проверяем на соответствие if($acc==$mail_login."@mail.ru") { // запись в файл удачно зарегистрированного аккаунта $textfile->add_string_to_file($res_file,"$mail_login@mail.ru;$pwd\n",60); } else { echo "не удачная регистрация <br>"; } // чистим данные браузера $browser->clear_cache(); $browser->clear_history(); $browser->clear_cookies("",false); // сделаем активным главный браузер $browser->set_active_browser(0,true); // закрыть все браузеры $browser->close_all_tabs(); } // Quit $app->quit(); |
Теперь добавим работу с user-agent строкой. Для этого у нас есть файл user-agents.txt, который содержит данные в следующем формате:
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 1.1.4322)
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; FunWebProducts; (R1 1.5); .NET CLR 1.1.4322)
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648)
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; InfoPath.2; Windows-Media-Player/10.00.00.3990)
По аналогии с прокси получим данные из файла в массив добавим в начало скрипта следующий код:
$useragents = file(«useragent.txt»); Задавать эти строки мы будем случайным образом сразу после того как делаем активным 1 браузер, используя следующий код: $browser->set_user_agent($useragents[rand(0,count($useragents)-1)]);, где ($useragents[rand(0,count($useragents)-1)] это случайный элемент массива от 0 до количества элементов в массиве-1.
В конце скрипта перед $app->quit(); добавим код отключения прокси: $browser->disable_proxy(«all connections»);
Теперь наш скрипт имеет вид:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
$xhe_host ="127.0.0.1:7010"; // The following code is required to properly run XWeb Human Emulator require("../../Templates/xweb_human_emulator.php"); // получаем прокси из файла в массив $proxies= file("proxy.txt"); // строки юзер агент $useragents = file("useragent.txt"); // путь к файлу с аккаунтами $res_file = "mail_accs.txt"; // перейдём на пустую страницу $browser->navigate("about:blank"); $browser->wait_for(60,1); // организовываем цикл на основе массива с проксями for($i=0;$i<count($proxies);$i++) { // задаём количество браузеров $browser->set_count(2); // делаем активный следующим $browser->set_active_browser(1,true); // задать user-agent строку $browser->set_user_agent($useragents[rand(0,count($useragents)-1)]); // получить прокси из массива $proxy = $proxies[$i]; // задать прокси браузеру $browser->enable_proxy("all connections",$proxy); $browser->navigate("http://mail.ru/"); $browser->wait_for(60,1); // перейти на страницу регистрации $anchor->click_by_inner_text("Регистрация в почте ",true); $browser->wait_for(); // рандомно выставлять пол аккаунта $gnd=rand(1,2); switch($gnd) { case 1: $gender = "man"; break; case 2: $gender = "woman"; break; } // задать имя $input->set_value_by_number(0,$submitter->generate_random_name("RU",$gender)); // задать фамилию $input->set_value_by_number(1,$submitter->generate_random_second_name("RU",$gender)); // день $listbox->select_random_value_by_number(0); // месяц $listbox->select_random_value_by_number(1); // год $listbox->select_random_value_by_number(2); // выберем пол $radiobox->set_checked_by_value($gnd,true); // логин для почты $mail_login = $submitter->generate_random_nick_name(rand(5,9)).rand(100,10000); // установим сгенерённый логин в поле $input->set_value_by_number(3,$mail_login); // сгенерить пароль для мыла $pwd = $submitter->generate_random_text(rand(7,11),1); // пароль $input->set_value_by_number(4,$pwd); // подтверждение пароля $input->set_value_by_number(5,$pwd); // перейти на заполнение полей без телефона $anchor->click_by_inner_text("У меня нет мобильного телефона",true); $browser->wait_for(); // выберем случайный вопрос $listbox->select_random_value_by_number(5); // заполним поле ответа $ans= $submitter->generate_random_text(rand(5,9),1); $input->set_value_by_number(8,$ans); // зарегистрировать $button->click_by_number(1); $browser->wait_for(); sleep(3); // распознать каптчу тройную каптчу $cap = $app->dlg_captcha_from_url_exactly("http://e.mail.ru/cgi-bin/x_image?num=1",false); $cap1 = $app->dlg_captcha_from_url_exactly("http://e.mail.ru/cgi-bin/x_image?num=2",false); $cap2 = $app->dlg_captcha_from_url_exactly("http://e.mail.ru/cgi-bin/x_image?num=3",false); sleep(1); // задать каптчу $input->set_value_by_name_by_form_number("code",$cap.$cap1.$cap2,11); // закончить с каптчей $button->click_by_number(20); $browser->wait_for(); sleep(3); // получаем акк под которым зашли в почту $acc=$element->get_element_innerText_by_id("portal-menu__user-email"); // проверяем на соответсвие if($acc==$mail_login."@mail.ru") { // запись в файл удачно зарегистрированного аккаунта $textfile->add_string_to_file($res_file,"$mail_login@mail.ru;$pwd\n",60); } else { echo "не удачная регистрация <br>"; } // чистим данные браузера $browser->clear_cache(); $browser->clear_history(); $browser->clear_cookies("",false); // сделаем активным главный браузер $browser->set_active_browser(0,true); // закрыть все браузеры $browser->close_all_tabs(); } // отключение прокси $browser->disable_proxy("all connections"); // Quit $app->quit(); |
Производительность скрипта очень сильно зависит от скорости и качества используемых прокси.
Скрипт написан 18.01.2012 в Human Emulator 4.2 Advanced.
На момент публикации статьи 23.01.2012 скрипт был рабочий.