Скрипт для добавления объявлений на сайт irr.ru

В этой статье мы рассмотрим один из примеров написания скрипта для добавления объявлений на сайт 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.

скачать скрипт

Скрипт Human Emulator размещения объявления на доске Slando

Предлагаем вашему вниманию скрипт, который добавляет объявления на бесплатную доску объявлений 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.

скачать скрипт