Автоматическое размещение объявлений на доске 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, в раздел Компьютерная техника->Ноутбуки.
Начнем с подготовительной части — просмотрим сайт и узнаем какие поля обязательны для заполнения и какие нам бы хотелось заполнить дополнительно.
В нашем случае это будет — Область;город;цена (в руб.);марка;модель;состояние;тип предложения;вес(кг);размер жесткого диска (в Гб);тип видеокарты;объем памяти; диагональ экрана(дюймы);время работы батареи(часы);тип аккумулятора;описание;название папки с фотографиями;контактное лицо;телефон;скайп.
В таком виде (через «;») данные будут вбиваться в текстовый файл, откуда в последствии будут взяты при добавлении объявления.
Начнем с настроек:
$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;
Начнем писать скрипт:
Читаем данные и присвоим им переменные для удобства:
$adds = $textfile->read_file($path);
Получим массив объявлений, разбив данные объявлений из текстового файла через перенос строки
$add = explode("\r\n",$adds);
Затем перейдем на сайт
$browser->navigate("http://irr.ru/");
Авторизируемся
$input->set_value_by_name("login",$login);
$input->set_value_by_name("password",$pass);
$button->click_by_inner_text("Вход",false);
Переходим к подаче объявления
$anchor->click_by_inner_text("Подать объявление",false);
C помощью цикла начинаем подачу объявлений
for($i = $num; $iПолучаем элементы данных объявления в массиве
$item = explode(";",$add[$i]);Начинаем вбивать данные:
// область $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 с помощью клавиатуры:
// перейдем к категории ноутбуки $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);Продолжаем заполнение объявления:
// цена $input->set_value_by_name("price",$item[2]);Модель и марку выбираем через "другая" для упрощения кода:
// марка $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]);Обрабатываем добавление фотографий:
// фотографии (не более 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); }Завершаем добавление данных:
// контактное лицо $input->set_value_by_name("seller",$item[10]); // телефон $input->set_value_by_name("phone",$item[11]); // скайп $input->set_value_by_name("skype",$item[12]);Обрабатываем капчу:
// капча $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);Жмем "далее":
$button->click_by_name("next_link");Ждем обработку объявления, проверяя наличие соответствующего сообщения на странице:
while(!$h2->is_exist_by_inner_text("Выберите формат Вашего объявления",false)) sleep($wt_long);Выбираем бесплатный вариант добавления:
$anchor->click_by_inner_text(" на 30 дней Бесплатно",false); sleep($wt);Проверяем успешность добавления, опять-таки через проверку наличия соответствующего сообщения на странице:
if ($h2->is_exist_by_inner_text("Спасибо! Ваше объявление размещено на irr.ru",false)) { debug_mess("объявление размещено"); sleep($wt); } else { debug_mess("объявление НЕ размещено"); 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
… и т.д.
Настройки скрипта:
// почтовый ящик $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.
В нашем случае работа с классом добавлена для наглядности.
Сам скрипт:
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.