Автоматическое размещение объявлений на доске olx.
Присоединяйтесь к нам в ВК:
https://vk.com/humanemulator
https://vk.com/xscripts
https://vk.com/club130582676
Автоматическое размещение объявлений на доске olx.
Присоединяйтесь к нам в ВК:
https://vk.com/humanemulator
https://vk.com/xscripts
https://vk.com/club130582676
В этой статье мы рассмотрим один из примеров написания скрипта для добавления объявлений на сайт irr.ru, в раздел Компьютерная техника->Ноутбуки.
Начнем с подготовительной части — просмотрим сайт и узнаем какие поля обязательны для заполнения и какие нам бы хотелось заполнить дополнительно.
В нашем случае это будет — Область;город;цена (в руб.);марка;модель;состояние;тип предложения;вес(кг);размер жесткого диска (в Гб);тип видеокарты;объем памяти; диагональ экрана(дюймы);время работы батареи(часы);тип аккумулятора;описание;название папки с фотографиями;контактное лицо;телефон;скайп.
В таком виде (через «;») данные будут вбиваться в текстовый файл, откуда в последствии будут взяты при добавлении объявления.
Начнем с настроек:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$dbg = true; - вкл. панель отладки // ключ к капчи $apikey = ""; - ключ для сервиса anti-captcha.com // путь к папке с фото $picture = "data/"; - путь к папке с папками фотографий объявлений // путь к капче $img = "res/"; - путь к сохраняемой капчи // путь к файлу с данными $path = "data/adds.txt"; - путь к файлу с данными объявлений // данные для авторизации $login = "testnot@mail.ru"; $pass = "testfortest"; // ожидание ( в секундах) $wt_long = 10; $wt = 5; |
Начнем писать скрипт:
Читаем данные и присвоим им переменные для удобства:
1 |
$adds = $textfile->read_file($path); |
Получим массив объявлений, разбив данные объявлений из текстового файла через перенос строки
1 |
$add = explode("\r\n",$adds); |
Затем перейдем на сайт
1 |
$browser->navigate("http://irr.ru/"); |
Авторизируемся
1 2 3 |
$input->set_value_by_name("login",$login); $input->set_value_by_name("password",$pass); $button->click_by_inner_text("Вход",false); |
Переходим к подаче объявления
1 |
$anchor->click_by_inner_text("Подать объявление",false); |
C помощью цикла начинаем подачу объявлений
1 |
for($i = $num; $i<count($add); $i++) |
Получаем элементы данных объявления в массиве
1 |
$item = explode(";",$add[$i]); |
Начинаем вбивать данные:
1 2 3 4 5 6 7 |
// область $anchor->set_focus_by_href("javascript:void(0)",false); $keyboard->send_input($item[0]); $keyboard->send_key(9); // город $input->set_value_by_name("address_city",$item[1]); |
Затем обходим простым способом javascript с помощью клавиатуры:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// перейдем к категории ноутбуки $keyboard->send_key(9); $keyboard->send_key(40,true); $keyboard->send_key(40); $keyboard->send_key(40); $keyboard->send_key(40); $keyboard->send_key(40); $keyboard->send_key(13,true); sleep($wt); $keyboard->send_key(9); $keyboard->send_key(40,true); $keyboard->send_key(40); $keyboard->send_key(13,true); sleep($wt); $keyboard->send_key(9); $keyboard->send_key(40,true); $keyboard->send_key(40); $keyboard->send_key(9); sleep($wt); |
Продолжаем заполнение объявления:
1 2 |
// цена $input->set_value_by_name("price",$item[2]); |
Модель и марку выбираем через «другая» для упрощения кода:
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 |
// марка $anchor->set_focus_by_inner_text("* Выберите марку",false); $keyboard->send_input("Другая"); $keyboard->send_key(9); $input->set_value_by_name("make_other",$item[3]); // модель $input->set_value_by_name("model_other",$item[4]); // состояние (привязка к слову "новый", в противном случае всегда будет б/у) $anchor->set_focus_by_inner_text("* Состояние",false); if($item[5] == "новый") { $keyboard->send_key(40); $keyboard->send_key(40); $keyboard->send_key(40); } else { $keyboard->send_key(40); $keyboard->send_key(40); } $keyboard->send_key(9); // тип предложения (снова используем клавиатуру) $anchor->set_focus_by_inner_text("* Тип предложения",false); if($item[6] == "куплю") { $keyboard->send_key(40); $keyboard->send_key(40); } elseif($item[6] == "продам") { $keyboard->send_key(40); $keyboard->send_key(40); $keyboard->send_key(40); } elseif($item[6] == "обменяю") { $keyboard->send_key(40); $keyboard->send_key(40); $keyboard->send_key(40); $keyboard->send_key(40); } else { $keyboard->send_key(40); $keyboard->send_key(40); $keyboard->send_key(40); $keyboard->send_key(40); $keyboard->send_key(40); } $keyboard->send_key(9); // вес (кг) $input->set_value_by_name("weight",$item[7]); // размер жесткого диска (в Гб) $input->set_value_by_name("hdd",$item[8]); // тип видеокарты (привязка к слову "встроенная", иначе всегда "дискретная") $anchor->set_focus_by_inner_text("тип видеокарты",false); if($item[9] == "встроенная") { $keyboard->send_key(40); } else { $keyboard->send_key(40); $keyboard->send_key(40); } $keyboard->send_key(9); // объем памяти (в мб) $anchor->set_focus_by_inner_text("Объем памяти, Мб",false); $keyboard->send_input($item[10]); $keyboard->send_key(9); // диагональ экрана (дюймов) $input->set_value_by_name("diagonal",$item[11]); // время работы батареи (ч) $input->set_value_by_name("battery",$item[12]); // тип аккумулятора $input->set_value_by_name("tip_akkumuljatora",$item[13]); // описание $textarea->set_value_by_name("text",$item[14]); |
Обрабатываем добавление фотографий:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// фотографии (не более 10),считываем все фотографии из указанной папки (по названию) в данных объявления: $photos = $folder->get_all_items($picture.$item[9],false,false); // получаем массив путей к фото: $images = explode("\r\n", $photos); // добавляем все фото на сайт: foreach($images as $photo) { $window->execute_open_file("Выбор",$photo,"&Открыть",false,true); $inputfile->click_by_name("photo"); sleep($wt); } |
Завершаем добавление данных:
1 2 3 4 5 6 7 8 |
// контактное лицо $input->set_value_by_name("seller",$item[10]); // телефон $input->set_value_by_name("phone",$item[11]); // скайп $input->set_value_by_name("skype",$item[12]); |
Обрабатываем капчу:
1 2 3 4 5 6 |
// капча $img = realpath($img); $image->screenshot_by_name($img."/captcha.jpeg","captcha"); $captcha = $anticapcha->recognize($img."/captcha.jpeg", $apikey, $path ='http://www.anti-captcha.com',true,5,120,0,0,1,0,0,0); $input->set_value_by_name("captcha",$captcha); sleep($wt); |
Жмем «далее»:
1 |
$button->click_by_name("next_link"); |
Ждем обработку объявления, проверяя наличие соответствующего сообщения на странице:
1 2 |
while(!$h2->is_exist_by_inner_text("Выберите формат Вашего объявления",false)) sleep($wt_long); |
Выбираем бесплатный вариант добавления:
1 2 |
$anchor->click_by_inner_text(" на 30 дней Бесплатно",false); sleep($wt); |
Проверяем успешность добавления, опять-таки через проверку наличия соответствующего сообщения на странице:
1 2 3 4 5 6 7 8 9 10 |
if ($h2->is_exist_by_inner_text("Спасибо! Ваше объявление размещено на irr.ru",false)) { debug_mess("объявление размещено"); sleep($wt); } else { debug_mess("<b>объявление НЕ размещено</b>"); sleep($wt); } |
Примечание:
1) не забываем ставить «слипы» (sleep), особенно, если интернет медленный или компьютер маломощный;
2) скрипт расчитан на добавление до 3-х фотографий;
3) для корректной работы,перед запуском скрипта, отключить сообщения браузера (сервис-настройки-браузер-отключить сообщения браузера).
Логика скрипта:
1) считывание данных объявления;
2) переход на сайт и авторизация;
3) добавление объявления;
4) проверка успешности добавления;
Скрипт написан 19.11.2014 в Human Emulator 4.6.50 Advanced.
Предлагаем вашему вниманию скрипт, который добавляет объявления на бесплатную доску объявлений Slando.
Скрипт берёт данные для объявления из заранее подготовленного csv файла и добавляет их на Slando,
при первом проходе скрипт идёт на почту и активирует там добавленное объявление.
В CSV файле данные для объявления содержаться в следующем формате:
заголовок объявления;раздел объявления;тип объявления;марка;модель;цена;цвет;год;кпп;топливо;
объём двигателя;пробег;бизнес или частное лицо;номер телефона;описание;список фотографий через ,;
регион;город;контактное лицо
Peugeot 508 Allure 2.0HDI 2012;Транспорт;Легковые автомобили;Peugeot;508;37638;Белый;2012;Автомат;
Дизель;2000;4000;Частное лицо;0953203020;
Безопасность: ABD, ABS, ESP, Иммобилайзер, Ксеноновые фары, Подушка безопасности (Airbag), Серворуль, Сигнализация,
Центральный замок. Комфорт: Бортовой компьютер, Датчик света, Климат контроль, Кожаный салон,
Круиз контроль, Мультируль, Омыватель фар, Парктроник, Подогрев зеркал, Подогрев сидений,
Сенсор дождя, Усилитель руля, Эл. стеклоподъемники, Электропакет.Мультимедиа: CD, DVD, MP3,
Акустика, Магнитола, Система навигации GPS.Автомобиль с тест-драйва, на учете не стоял.
Комплектация Allure + ксенон + сигнализация + передний парктроник + белый перламутр.;img1.jpg,img2.jpg;Киевская;Киев;iltaua
… и т.д.
Настройки скрипта:
1 2 3 4 5 6 7 8 9 10 11 |
// почтовый ящик $email="vanya.testscript@mail.ru"; // логин почты $mail_login="vanya.testscript"; // пароль $mail_password="q1w2e3r4t5"; // полный путь к папке с картинками $img_path="C:\\XWeb\\Human Emulator\\My Scripts\\slando\\images\\" ; // путь к csv файлу с объявлениями $file_path="data/adwords.csv"; |
Для разбора данных мы написали специальный класс AdwordData. В скрипте мы объявляем объект этого класса,
а затем разбираем в него данные для того что бы передать их в форму добавления объявлений.
Для разбора CSV файла мы используем стандартные функции PHP. В принципе,
можно обойтись и без определения класса и работы с ним и передавать массив
с данными напрямую в функцию добавления объявления add_adword($obj)
по аналогии как это сделано в функции set($arr) в классе AdwordData.
В нашем случае работа с классом добавлена для наглядности.
Сам скрипт:
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 |
<?php /* ** // Наш сайт http://x-scripts.com // Скрипт скрипт добавления объявлений на доску slando. // страничка скрипта http://x-scripts.com/scripts/slando.php // по любым вопросам касающимся скрипта // можно написать нам на мыло order@x-scripts.com ** */ $xhe_host ="127.0.0.1:7010"; // The following code is required to properly run XWeb Human Emulator require("../../Templates/xweb_human_emulator.php"); // //////////////////////// настройки скрипта ///////////////////////// // почтовый ящик $email="vanya.testscript@mail.ru"; // логин почты $mail_login="vanya.testscript"; // пароль $mail_password="q1w2e3r4t5"; // полный путь к папке с картинками $img_path="C:\\XWeb\\Human Emulator\\My Scripts\\slando\\images\\" ; // путь к файлу с объявлениями $file_path="data/adwords.csv"; // скрипт работает в режим отладки $dbg = true; // //////////////////////// дополнительные модули /////////////// // функции require_once("tools/functions.php"); // функции require_once("tools/adw_data.php"); // /////////////////////// скрипт /////////////////////////////////////////// debug_mess(date("\[ d.m.y H:i:s\] ")." скрипт запустили"); // задать как ие 7 $browser->set_model("IE7 Standard"); // подать все объявления из csv файла if (($handle = fopen($file_path, "r")) !== true) { while (($data = fgetcsv($handle,0, ";")) !== true) { // перейти на доску $browser->navigate("slando.com.ua"); // перейти к подаче объявления $anchor->click_by_inner_text("+ Подать объявление"); // создадим объект $obj_adw = new AdwordData(); // задать в объект значения $obj_adw->set($data); // показать что разобрали в панель отладки //$obj_adw->show(); // добавить объявление в форму add_adword($obj_adw); // объявление прошло удачно if($anchor->is_exist_by_inner_text("Проверить почту ",false)) { // активировать объявление activate_by_mail($mail_login,$mail_password); } else debug_mess("не добавили объявление!!!"); // закрыть все табы $browser->close_all_tabs(); } fclose($handle); } debug_mess(date("\[ d.m.y H:i:s\] ")." скрипт закончил работу"); // Quit $app->quit(); ?> |
Скрипт написан 4.11.2012 в Human Emulator 4.4.21 Advanced.