Форум: "Начинающим";
Текущий архив: 2009.08.02;
Скачать: [xml.tar.bz2];
ВнизЗаполнить поле, нажать кнопку Найти похожие ветки
← →
dumb (2009-06-05 22:59) [0]Привет мастера. Прошу у вас помощи в написании простой программки, над которой уже ломаю голову третий час...
Есть вот такая страничка: http://kamtreid.ru/bon.php
На ней есть форма, которая как видимо находится по адресу http://kamtreid.ru/form.php
Слева имеется поле input с параметрами<input name="r" value="R" maxlength="13" type="text">
а также кнопка, которая становится доступной после 60 сек.<input name="submit" value="Получить бонус" type="submit">
После заполнения поля и нажатия кнопки на адрес http://kamtreid.ru/bonus.php отправляется этот запрос
cod=9qZQj2&r=R462657825576&submit=%CF%EE%EB%F3%F7%E8%F2%FC+%E1%EE%ED%F3%F1
cod - это типа уникальный идентификатор сессии.
← →
dumb (2009-06-05 23:00) [1]вот код формы получения бонуса:
<!--НАЧАЛО ФОРМЫ БОНУСА-->
<script language="JavaScript" src="http://kamtreid.ru/form.php"></script>
<center><form action="http://kamtreid.ru/bonus.php" method="post" name="vbaccept" id="vbaccept">
<table bgcolor="#aaaaaa" border="0" cellpadding="0" cellspacing="1" width="180">
<tbody><tr><td align="center" bgcolor="#ffffff" height="25"><font color="#000000" size="2" face="verdana">Введите wmr кошелек</font></td></tr><tr><td
align="center" bgcolor="#ffffff" height="1"><input name="cod" value="9qZQj2" type="hidden">
</td></tr><tr><td align="center" bgcolor="#ffffff" height="30"><input name="r" value="R" maxlength="13" type="text"></td></tr><tr>
<td align="center" bgcolor="#ffffff" height="30">
<input name="submit" value="Получить бонус" type="submit">
</td></tr></tbody></table></form></center>
<!--КОНЕЦ ФОРМЫ БОНУСА-->
← →
dumb (2009-06-05 23:00) [2]ПЕРВЫЙ СПОСОБ:
Сначала я составил простой алгоритм:
1. Зайти на http://kamtreid.ru/bon.php
2. Заполнить поле
3. Подождать 62 сек
4. Нажать кнопку
Реализовал вот так:procedure TForm1.Button4Click(Sender: TObject);
var
Elements: OleVariant;
o: integer;
begin
Webbrowser1.Navigate("http://kamtreid.ru/bon.php");
Application.ProcessMessages;
While WebBrowser1.Busy do
begin
sleep(0);
Application.ProcessMessages; // ждем пока страничка загрузится
end;
Elements:=WebBrowser1.OleObject.Document.forms.item.elements; // ищем все формы
for o:= 0 to (Elements.length-1) do
begin
if (Elements.item(o).type = "text") and //ищем нужное поле
(Elements.item(o).name = "r") then
Elements.item(o).value := Edit1.Text; //пишем в поле значение из Edit. непонятно почему сначала работало а потом перестало...
end;
Delay(62); // жду 62 сек
WebBrowser1.OleObject.document.vbaccept.submit;
end;
← →
dumb (2009-06-05 23:01) [3]Проблемы ПЕРВОГО способа:
Проблема с этим :WebBrowser1.OleObject.document.vbaccept.submit;
здесь должно происходить submit и нажиматься кнопка. Но она не нажимается и появляется ошибка "Не найден член группы" т.к. на странице
http://kamtreid.ru/bon.php ее нет. Она есть на http://kamtreid.ru/form.php
И с этим:Elements:=WebBrowser1.OleObject.Document.forms.item.elements;
for o:= 0 to (Elements.length-1) do
begin
if (Elements.item(o).type = "text") and
(Elements.item(o).name = "r") then
Elements.item(o).value := Edit1.Text;
Почему-то поле иногда заполняется, а иногда нет. А бывает вообще заполняется не то, которое нужно (вверху есть поле от google).
← →
dumb (2009-06-05 23:01) [4]ВТОРОЙ СПОСОБ:
Потом подумав, решил сделать иначе:
1. Зайти на http://kamtreid.ru/bon.php
2. Сохранить код странички
3. Вытащить 6-символьный параметр cod
4. Составить post-запрос вида cod=9qZQj2&r=R462657825576&submit=%CF%EE%EB%F3%F7%E8%F2%FC+%E1%EE%ED%F3%F1 и отправить его подождав 62 сек
Реализовал вот так:var
i: integer;
f : textfile;
s,v : string;
begin
Webbrowser1.Navigate("http://kamtreid.ru/bon.php"); // переходим на сайт
Application.ProcessMessages; // ждем пока загрузится
While WebBrowser1.Busy do
begin
sleep(0);
Application.ProcessMessages;
end;
WB_SaveAs_HTML(WebBrowser1,"c:\cod.txt") ; // эта функция сохраняет исходный код странички
// а эта ищет 6 символьный параметр cod, записывая его в строку v
assignfile(f,"c:\cod.txt");
reset(f);
while not eof(f) do
begin
readln(f,s);
if pos("name="+#39+"cod"+#39+" value=",s)>0 then
begin
v:=copy(s,pos("name="+#39+"cod"+#39+" value=",s)+20,6);
break;
end;
end;
closefile(f);
Edit2.Text:=v;
----дальше идет составление пост запроса и отправка
Но тут опять же ничего не получилось... Код формы не сохраняется нивкакую! Вместо него только это:<!--НАЧАЛО ФОРМЫ БОНУСА-->
<script language="JavaScript" src="http://kamtreid.ru/form.php"></script><!--КОНЕЦ ФОРМЫ БОНУСА-->
Можно ли как-нибудь вытащить код формы с этим параметром?
Помогите пожалуйста разобраться. Очень хочу написать то, что начал.
← →
TIF © (2009-06-06 02:09) [5]> Помогите пожалуйста разобраться. Очень хочу написать то,
> что начал.
Кто мешает? Или, точнее, ЧТО мешает?
> WB_SaveAs_HTML(WebBrowser1,"c:\cod.txt") ;
> assignfile(f,"c:\cod.txt");
Бред. Зачем сохранять код страницы в файл и потом ещё работать с этим файлом, когда можно засунуть код сразу в строковую переменную и работать с ней. Пора учить теорию и основы. Становится понятно, ЧТО мешает... Недостаток начальных знаний и путаница в голове :)
> Код формы не сохраняется нивкакую!
Зайди на kamtreid.ru/form.php. Тебя выкинет на kamtreid.ru. Ы?
Если всё ещё не врубился, поясняю: скрипт form.php при запросе к нему проверяет HTTP_REFERRER вызывающей его страницы. Если страница-реферрер НЕ bon.php - значит показываем кукиш и редиректим на главную
Теперь про компоненты. Использовать для подобных фокусов браузер - извращение. Используй IdHttp из пакета включенных в Delphi компонентов Indy. Примеры и описание искать в интернете, также можно почитать и справку, а лучше и то и то. Поисковики рулят. Вперёд и с песней :)
Про таймер. Таймер просто защита от идиотов, он только делает активной кнопку, а если мы не собираемся отсылать запрос через кнопку, каким местом он нам мешает? ;-)
Про алгоритм.
1) Делаем через IdHttp POST-запрос к form.php, отсылая при этом заголовок-header POST-запроса с HTTP_REFERRER равным "http://kamtreid.ru/bon.php". 2) Получаем код страницы, парсим его (Copy, Pos, Delete, функции обработки строк), получаем значение "cod"
3) Отправляем POST-запрос на bonus.php с "cod" и "r"
4) О боже, мы это сделали, ура, МЫ НА ДВЕ КОПЕЙКИ БОГАЧЕ!!!
А теперь вопрос к dumb: сколько бы ты мог сделать полезной работы, пока тратил кучу времени на код получения бонуса в две копейки? Решил сделать очередной автосборщик? ))) Ухаха... Так пойми, что кол-во затраченного времени и сил больше полученной от этого пользы. В РАЗЫ!
Я уж молчу про кол-во потраченного трафика. Он хоть дешевле полученных двух копеек? :)))
Если очень хочется лёгких денег за обезьянью работу - могу дать ссылочку. За 45 минут махания мышкой и нажатия на её кнопочки получишь целых 75 центов - в 1125 раз больше, чем в этом бонусе :)
На мороженое, интернет, сотовый хватит. Это будет НЕ работа, это приработок, к тому же "серенький", но уж всяко получше тех двух копеек, из-за которых ты тут извращался
Всё, я закончил читать нотации. Вдумчиво прочитай два или три раза, намотай на ус и делай выводы ;-) Про литературу о Delphi не забудь.
← →
dumb (2009-06-06 12:31) [6]Спасибо TIF за помощь, но код формы не вытаскивается. вместо нее главная страница. Почему?
var CM : TIdCookieManager;
LoginInfo: TStrings;
Response: TStringStream;
i:integer;
begin
CM := TidCookieManager.Create(IdHTTP1);
IdHTTP1.AllowCookies := True;
IdHTTP1.CookieManager := CM;
IdHTTP1.HandleRedirects := True;
LoginInfo := TStringList.Create;
Response := TStringStream.Create("");
LoginInfo.Clear;
LoginInfo.Add("Host=kamtreid.ru");
LoginInfo.Add("Referer=http://www.kamtreid.ru/bon.php");
memo1.Lines.Clear;
IdHTTP1.Host:="kamtreid.ru";
IdHTTP1.Port:=80;
Memo1.Lines.Text:=IdHTTP1.Post("http://kamtreid.ru/form.php",LoginInfo);
Memo1.Lines.Add(Response.DataString);
for i:=0 to IdHTTP1.CookieManager.CookieCollection.count-1 do
memo2.lines.add(IdHTTP1.CookieManager.cookieCollection.items[i].cookieText);
Response.Free;
LoginInfo.Free;
end;
← →
dumb (2009-06-06 13:05) [7]разобрался с form.php
иду дальше
← →
dumb (2009-06-06 14:46) [8]TIF спасибо за нотации и подсказки ;)
← →
TIF © (2009-06-07 20:22) [9]Всегда пожалуйста )))
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.08.02;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.004 c