Страница 1 из 2
Скрипт по добавлению фотографий
Добавлено: 16 ноя 2010, 16:34
morfius
Появилась задача:
В созданной группе (для родственников) нужно в созданные альбомы добавить фотографии. В однокласниках нет паетной загрузки фото и тратить время естественно не хочется. Тем более когда есть такой софт.
Вот и хочу добить его так сказать до рабочего варианта.
Код: Выделить всё
<?php
$xhe_host ="127.0.0.1:7011";
// The following code is required to properly run XWeb Human Emulator
require("../Templates/xweb_human_emulator.php");
// Идём на однокласники и логинимся
$browser->navigate('http://www.odnoklassniki.ru/cdk/st.cmd/main/tkn/1813');
$browser->wait_for(60,1);
$input->set_value_by_name('field_email','логин');
$input->set_value_by_name('field_password','пасс');
$button->click_by_name('hook_FormButton_button_go');
$browser->wait_for(60,1);
// успешно зашли ))
//далее выбираю группы, в группах выбираю группу, захожу в группу выбираю альбом, захожу в альбом и жму кнопку добавить фото - и всё -
$button->click_by_name('hook_FormButton_button_add_photo');
$browser->wait_for(60,1);
$button->click_by_name('hook_FormButton_button_add_photo');
$browser->wait_for(60,1);
$button->click_by_name('hook_FormButton_button_add_photo');
$browser->wait_for(60,1);
$button->click_by_name('hook_FormButton_button_add_photo');
$browser->wait_for(60,1);
$button->click_by_name('hook_FormButton_button_add_photo');
$browser->wait_for(60,1);
$button->click_by_name('hook_FormButton_button_add_photo');
$browser->wait_for(60,1);
$button->click_by_name('hook_FormButton_button_add_photo');
$browser->wait_for(60,1);
// Quit
$app->quit();
?>
Но вот в чём незадача.
Скрипт входит на страницу одноклассники.ру , вводит логин и пароль, а вот в группу уже не заходит.
И при записи скрипта, обратил внимание, что нажатие клавиш не записывалось вплоть до того момента, пока не нажал клавишу добавить фото. И всё добавилось целиком.
Re: Скрипт по добавлению фотографий
Добавлено: 16 ноя 2010, 16:41
Support
Помимо записи скрипта макросом, есть другие методы. Попробуйте ознакомиться с видюшками и статьями на сайте.
Re: Скрипт по добавлению фотографий
Добавлено: 17 ноя 2010, 08:12
morfius
Итак, продолжаем. Есть сдвиги )) Ну маленькие конечно, но сдвиги есть точно ))
То что вверху написано, считаем прошедшим вариантом.
Итак. имеем вот такой скрипт, который ...
Код: Выделить всё
<?php
$xhe_host ="127.0.0.1:7011";
// The following code is required to properly run XWeb Human Emulator
require("../Templates/xweb_human_emulator.php");
$browser->navigate('http://www.odnoklassniki.ru/');
$browser->wait_for(200,1);
$input->set_value_by_name('field_email','логин');
$input->set_value_by_name('field_password','пасс');
$button->click_by_name('hook_FormButton_button_go');
$browser->wait_for(200,1);
$anchor->click_by_number(16);
$anchor->click_by_inner_text('Группы (4)',true);
$browser->wait_for(200,1);
$anchor->click_by_inner_text(32);
$anchor->click_by_inner_text('Родственнички',true);
$anchor->send_event_by_number(32,'onclick');
$browser->wait_for(200,1);
// Quit
$app->quit();
?>
... 1) умеет заходить под моим логином в Одноклассники. 2) Кликать по ссылке Группы 3) Выбирать в Группах Группу Родственнички
Ну вот когда я ему добавляю эту строчку, для того, чтобы он кликнул по ссылке Фотоальбом:
Код: Выделить всё
$anchor->click_by_number(49);
$anchor->click_by_inner_text('Создать фотоальбом',true);
$browser->wait_for(200,1);
То Почемуто, при запуске скрипта, который в общем виде имеет такой вот текст:
Код: Выделить всё
<?php
$xhe_host ="127.0.0.1:7011";
// The following code is required to properly run XWeb Human Emulator
require("../Templates/xweb_human_emulator.php");
$browser->navigate('http://www.odnoklassniki.ru/');
$browser->wait_for(200,1);
$input->set_value_by_name('field_email','логин');
$input->set_value_by_name('field_password','пасс');
$button->click_by_name('hook_FormButton_button_go');
$browser->wait_for(200,1);
$anchor->click_by_number(16);
$anchor->click_by_inner_text('Группы (4)',true);
$browser->wait_for(200,1);
$anchor->click_by_inner_text(32);
$anchor->click_by_inner_text('Родственнички',true);
$anchor->send_event_by_number(32,'onclick');
$browser->wait_for(200,1);
$anchor->click_by_number(49);
$anchor->click_by_inner_text('Создать фотоальбом',true);
$browser->wait_for(200,1);
// Quit
$app->quit();
?>
Почему то вместо того чтобы нажать Создать фотоальбом - отправил комуто приглашение, о чём я узнал по открывшемуся Модальному окну, с сообщением, что приглашение отправлено.
Re: Скрипт по добавлению фотографий
Добавлено: 18 ноя 2010, 00:10
satih
со скриптом у тебя все очень плохо
после $anchor->click.. желательно ставить $browser->wait_for(200,1); ждать загрузки страницы.
тут
Код: Выделить всё
$anchor->click_by_inner_text(32);
$anchor->click_by_inner_text('Родственнички',true);
$anchor->send_event_by_number(32,'onclick');
вообще неясно, ты делаешь сразу 2 клика и потом еще посылаешь event на тот же анкор?
скорее всего это и есть проблема с 'Создать фотоальбом', ты либо кликаешь дважды на ссылку, либо после первого лкика не ждешь загрузки новой страницы
Re: Скрипт по добавлению фотографий
Добавлено: 18 ноя 2010, 19:42
morfius
Согласен. Напутал ойёёй
Исправляюсь. Ниже выкладываю скрипт, который заходит под вашим логином на одноклассники, заходит в Группы, выбирает нужную группу, Создаёт там альбом и подходит к диалогу выбора файла для добавления.
Вот собственно и вопрос.
Как правильно реализовать выбор файла с жёсткого диска?
Код: Выделить всё
<?php
$xhe_host ="127.0.0.1:7011";
// The following code is required to properly run XWeb Human Emulator
require("../Templates/xweb_human_emulator.php");
//Заходим в одноклассники
$browser->navigate('http://www.odnoklassniki.ru/');
$browser->wait(1);
$input->set_value_by_name('field_email','логин');
$input->set_value_by_name('field_password','пароль');
$button->click_by_name('hook_FormButton_button_go');
$browser->wait(1);
sleep(1);
//Кликаем по ссылке Группы
$anchor->click_by_inner_text('Группы (4)',true);
$browser->wait_for(60,1);
sleep(1);
//Кликаем по ссылке Родственнички
$anchor->click_by_inner_text('Родственнички',true);
$browser->wait_for(60,1);
sleep(1);
//Создаём альбом
$anchor->click_by_inner_text('Создать фотоальбом',true);$browser->wait_for(60,1);
sleep(1);
//Пишем название альбома
$textarea->click_by_atribute('name','st.layer.nameAlbum',true);
$textarea->set_value_by_name('st.layer.nameAlbum','Москва1');
$button->click_by_atribute('name','button_save',true);
sleep(1);
//Добавляем фото в альбом
$button->click_by_atribute('name','button_add_photo',true);
$inputfile->click_by_atribute('name','st.filename',true);
// Quit
$app->quit();
?>
Re: Скрипт по добавлению фотографий
Добавлено: 19 ноя 2010, 01:36
satih
зри в $inputfile
Re: Скрипт по добавлению фотографий
Добавлено: 20 ноя 2010, 02:44
morfius
Спасибо за подсказку.
Всё получилось. Хочется теперь усовершенствовать.
1. добавить цикл, с учётом того, что есть текстовый файл с 30 адресами.
2. За 30 фото, бывает так, что 1- раз, адрес фото не вводится. скрипт продолжает работу, но фотки не добавились. Можг=но как то это учитывать, если появляется сообщение об ошибках.
Вот сам код:
Код: Выделить всё
<?php
$xhe_host ="127.0.0.1:7011";
// The following code is required to properly run XWeb Human Emulator
require("../Templates/xweb_human_emulator.php");
//идём в одноклассники
$browser->navigate('http://www.odnoklassniki.ru/');
$browser->wait(1);
sleep(1);
//Кликаем по ссылке Группы
$anchor->click_by_inner_text('Группы (4)',true);
$browser->wait_for(60,1);
sleep(1);
//Кликаем по ссылке Родственнички
$anchor->click_by_inner_text('Родственнички',true);
$browser->wait_for(60,1);
sleep(1);
//заходим в альбом
$anchor->click_by_inner_text('Альбом',true);
$browser->wait_for(60,1);
sleep(1);
//Добавляем фото в альбом
$button->click_by_atribute('name','button_add_photo',true);
sleep(1);
//выбираем файл
$inputfile->set_value_by_number('0','D:\foto_odnakl\1.jpg');
sleep(2);
//жмём загрузить
$button->click_by_atribute('name','button_upload',true);
sleep(5);
//жмём сохранить
$button->click_by_atribute('name','button_save',true);
sleep(5);
... упустил повторяющиеся моменты ...
//Добавляем фото в альбом
$button->click_by_atribute('name','button_add_photo',true);
sleep(1);
//выбираем файл
$inputfile->set_value_by_number('0','D:\foto_odnakl\30.jpg');
sleep(2);
//жмём загрузить
$button->click_by_atribute('name','button_upload',true);
sleep(5);
//жмём сохранить
$button->click_by_atribute('name','button_save',true);
sleep(5);
?>
Re: Скрипт по добавлению фотографий
Добавлено: 20 ноя 2010, 13:00
satih
1.
Код: Выделить всё
$urls = file('urls.txt');
foreach ($urls as $url) {
// нужные действия
}
2. нужно парсить сурс страницы и искать нужные сообщения, парсить сурс с
к примеру, искать с
Re: Скрипт по добавлению фотографий
Добавлено: 28 ноя 2010, 18:57
morfius
спасибо за поддержание темы )
есть вопрос.
вот запускаю я этот скрипт (указан выше)
всё работает,но вот проблема - из 30 фоток - загружает 25-27
есть ошибка - такого плана: не вставляет адрес фотографии и жмёт загрузить.
В чём ошибка заключается?
Т.е. имею ввиду, что здесь лучше использовать?:
Код: Выделить всё
//выбираем файл
$inputfile->set_value_by_number('0','D:\foto_odnakl\30.jpg');
sleep(2);
sleep(2); - пробывал ставить и 5 не помогает
или
$browser->wait(1);
подскажите?
хочется сперва сделать так, чтобы он закидывал столько сколько ему сказано, а потом идти дальше. А когда результат не стабильный - не нравится.
Re: Скрипт по добавлению фотографий
Добавлено: 29 ноя 2010, 00:02
satih
незнаю как на том сайте, может фотка не успевает загрузится, либо название фотки ненравится сайту (содержит запрещенные символы, слишком длинное и т.п.). в любом случае в идеале перепроверять успех каждого действия скрипта, так получаешь скрипты которые можно оставлять работать днями без надзора. с фотками, после загрузки думаю сайт показывает сколько фоток загружено? парси это число и смотри если возрасло на 1, если при удачной загрузке пишется сайт отдает сообщение об успехе, жди его, если дает сообщение о неуспехе, ищи его тоже и повторяй загрузку.. короче надо затачивать под сайт, но в любом случае проверять результат работы
Re: Скрипт по добавлению фотографий
Добавлено: 29 ноя 2010, 01:25
morfius
Я скрипт подсократил немного.
Щас цикл есть и переменные ввёл.
Код: Выделить всё
<?php
$xhe_host ="127.0.0.1:7011";
// The following code is required to properly run XWeb Human Emulator
require("../Templates/xweb_human_emulator.php");
//Задаю переменные
$album="...";
$group="...";
$site="http://www.odnoklassniki.ru/";
$foto = file("foto.txt");
$sl1="1";
$sl2="3";
//отключаем картинки для скорости загрузки
$browser->enable_images($enable);
//идём в одноклассники
$browser->navigate($site);
$browser->wait(2);
sleep($sl1);
//Кликаем по ссылке Группы
$anchor->click_by_inner_text('Группы (4)',true);
$browser->wait(2);
sleep($sl1);
//Кликаем по ссылке Родственнички
$anchor->click_by_inner_text($group,true);
$browser->wait(3);
sleep($sl1);
//входим в альбомы
$anchor->click_by_inner_text('Альбомы (9)',true);
$browser->wait(3);
sleep($sl1);
//заходим в альбом
$anchor->click_by_inner_text($album,true);
$browser->wait(2);
sleep($sl1);
for ($i=0;$i<30;$i++)
{
//Жмём добавить фото
$button->click_by_atribute('name','button_add_photo',true);
$browser->wait(2);
sleep($sl2);
//выбираем файл
$inputfile->set_value_by_number('0',$foto[$i],true);
$browser->wait(2);
sleep($sl2);
//жмём загрузить
$button->click_by_atribute('name','button_upload',true);
$browser->wait(2);
sleep($sl2);
//жмём сохранить
$button->click_by_atribute('name','button_save',true);
$browser->wait(2);
sleep($sl2);
}
// Quit
$app->quit();
?>
НА самом деле, первое на что обратил внимание, то что не всегда вводится адрес файла (название файла непричём).
Встал вопрос, как проверять ВВЕДЁН адрес или НЕТ и только после этого продолжать.
Т.е. нужно добавить сюда if и др. но с чего начать не знаю ((
Код: Выделить всё
//выбираем файл
$inputfile->set_value_by_number('0',$foto[$i],true);
$browser->wait(2);
sleep($sl2);
Хочу научить проверить его, введено ли адрес фотографии и только если да - то жать загрузить, а если нет, то ввести адрес повторно )
Re: Скрипт по добавлению фотографий
Добавлено: 29 ноя 2010, 02:55
satih
morfius писал(а):Встал вопрос, как проверять ВВЕДЁН адрес или НЕТ и только после этого продолжать
$inputfile->get_value_by_number($number); например?
Re: Скрипт по добавлению фотографий
Добавлено: 29 ноя 2010, 09:11
morfius
ДА!
получается, что эта ))
Только вот какое дело:
Код: Выделить всё
//выбираем файл
$inputfile->set_value_by_number('0',$foto[$i],true);
$browser->wait(2);
sleep($sl2);
$inputfile->get_value_by_number(0);
if($inputfile->get_value_by_number(0)=="false")
... как сказать что нужно запихнуть опять текст
т.е. как ему сказать. что если false то
Код: Выделить всё
$inputfile->set_value_by_number('0',$foto[$i],true);
но не просто заново или следующую, а именно ту, которая не вставилась.
Ведь у нас берётся из файла адреса строки:
Re: Скрипт по добавлению фотографий
Добавлено: 29 ноя 2010, 13:24
satih
Код: Выделить всё
for($i=0; $i<count($foto); $i++){
do {
$inputfile->set_value_by_number(0, $foto[$i], true);
$browser->wait(2);
sleep($sl2);
$answer = $inputfile->get_value_by_number(0);
} while (empty($answer) || $answer === false);
}
возможная ошибка которую вижу у тебя это "false" вместо false, т.е. ты проверяешь если клас возвращает string а не boolean, можно проверить что именно возвращает клас через var_dump($inputfile->get_value_by_number(0)).
кроме того, в $inputfile->set_value_by_number('0',$foto[$i],true); 0 написан снова как string, нужен integer, т.е. $inputfile->set_value_by_number(0,$foto[$i],true); без кавычек.
что еще может быть (не юзал просто эту функцию..) что если поле пустое, вернет пустой ответ.
как мини заметка, цикл for($i=0; $i<count($foto);$i++) правильней сделать через foreach
Код: Выделить всё
foreach($foto as $single_foto){
do {
$inputfile->set_value_by_number(0, $single_foto, true);
$browser->wait(2);
sleep($sl2);
$answer = $inputfile->get_value_by_number(0);
} while (empty($answer) || $answer === false);
}
morfius писал(а):но не просто заново или следующую, а именно ту, которая не вставилась.
Ведь у нас берётся из файла адреса строки:
пока ты $i не увеличил на 1, $foto[$i] останется тем же, или ты застрял на том как сделать внутрений цикл внутри цикла for?
Re: Скрипт по добавлению фотографий
Добавлено: 29 ноя 2010, 16:39
morfius
пока ты $i не увеличил на 1, $foto[$i] останется тем же, или ты застрял на том как сделать внутрений цикл внутри цикла for?
вот именно )) именно на внутреннем цикле.