Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1244444905
LDV
2009-06-08 11:08
2009.08.02
CF_DIB и CF_BITMAP


15-1243579794
desc
2009-05-29 10:49
2009.08.02
Acer TravelMate 2480


2-1244101451
kir86975
2009-06-04 11:44
2009.08.02
Почему не правильно работает SetLength?


2-1241814858
TheEd
2009-05-09 00:34
2009.08.02
Помогите с lookup ами корректно поработать


15-1243360649
dmk
2009-05-26 21:57
2009.08.02
Че-то с ХДД





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский