[Delphi] Регистрация на форуме samp rp - Форум Cheat-Master.ru
  • Страница 1 из 1
  • 1
Модератор форума: Alowir, Sanoxxx  
[Delphi] Регистрация на форуме samp rp
Nikemmi Дата: Четверг, 19.06.2014, 17:25 | Сообщение # 1
Хороший))0
Сообщений: 475
Статус: Offline
Я буду использовать способ с компонентом webbrowser так как через post запроса могут возникнуть ошибки.

Открываем Delphi после uses пишем mshtml, jpeg



Кинем на форму: 6 таймера с вкладки System, 1 button с вкладки Standart, 2 memo с вкладки Standart, 4 edit с вкладки Standart, image с вкладки additional, label с вкладки standart, idhttp с вкладки indy clients
и webbrowser с вкладки Internet, сразу уменьшим его до минимальных размеров


Что получилось


У всех таймеров в свойствах ставим Enabled в значении False. Для таймера 1 интервал 2000, для таймера 2 2000, для 3 таймера 5000, для 4 таймера 1500,
для 5 таймера 1500, для 6 таймера 2000.



У всех Memo в свойствах cтавим Visible в значении False и Scrollbars в значении ssBoth


У Label в Сaption пишем что-то типа "Загружаю", "Получаю капчу".

1 Edit- это логин
2 Edit - это почта
3 Edit - это пароль
4 Edit - это капча

Приступим к коду.
Нажмем два раза по форме

Код
webbrowser1.Navigate('http://samp-rp.su/ucp.php?mode=register');// переходим на страницу регистрации через webbrowser
timer6.enabled:=true; // включаем таймер 6


Для Таймера 1
Код
var
Doc:IHTMLDocument2;
S:string;
begin
while WebBrowser1.ReadyState<READYSTATE_COMPLETE do    
begin
Application.ProcessMessages;
end;
Doc:= WebBrowser1.Document as IHTMLDocument2;
s:=doc.body.innerHTML;
Memo1.Text:=s;
timer2.enabled:=true; // включаем 2 таймер
timer1.enabled:=false; // выключаем 2 таймер


Этим кодом мы выводим в Memo1 исходный код страницы.

Для Таймера 2 код
Спасибо
Ch0c0Cube взял с его урока про парсинг.
Код
var
stroka:string; // Объявляем переменную типа стринг.
begin
memo2.text:=memo1.Lines[97]; // в этой строке находится капча
stroka:=Pars('src="',memo2.Text,'"'); // Выполняем парсинг, от  src= в 97 строке до "
Memo2.Clear; // Отчищаем мемо.
Memo2.Lines.Add(stroka); // Выводим результат
timer4.enabled:=true; // включаем 4 таймер
timer2.Enabled:=false; // включаем 2 таймер


В 97 строке в исходном коде страницы находится ссылка на капчу.

Почти в самом вверху
После

implementation

{$R *.dfm}


Пишем функцию парсинга

Код
function Pars(T_, ForS, _T:string):string;
var a, b:integer;
begin
Result := '';
if (T_='') or (ForS='') or (_T='') then Exit;
a:=Pos(T_, ForS);
if a=0 then Exit else a:=a+Length(T_);
ForS:=Copy(ForS, a, Length(ForS)-a+1);
b:=Pos(_T, ForS);
if b>0 then
Result:=Copy(ForS, 1, b - 1);
end;


Для таймера 3 код
Код
var    
a, a1, a2, a3, a4, a5, a6: variant;
    begin
     a1:=webbrowser1.oleobject.document.getelementbyid('username');  // заполняем поле с ником
     a1.value:=edit1.text; // из edit1
        a2:=webbrowser1.oleobject.document.getelementbyid('email'); // поле с почтой
     a2.value:=edit2.text;
      a3:=webbrowser1.oleobject.document.getelementbyid('email_confirm'); // повтор почты
     a3.value:=edit2.text;
      a4:=webbrowser1.oleobject.document.getelementbyid('new_password'); // пароль
     a4.value:=edit3.text;
     a5:=webbrowser1.oleobject.document.getelementbyid('password_confirm'); // повтор пароля
     a5.value:=edit3.text;
       a6:=webbrowser1.oleobject.document.getelementbyid('recaptcha_response_field');// капча
     a6.value:=edit4.text;

     a:=webbrowser1.oleobject.document.getelementbyid('submit');     // нажимаем регистрация

     WebBrowser1.OleObject.Document.GetElementByID('submit').Click; // нажимаем регистрация

     timer3.enabled:=false;
     timer6.enabled:=true;
     label1.visible:=true;
      webbrowser1.Navigate('http://samp-rp.su/ucp.php?mode=register'); // переходим обратно на страницу регистрации    
Image1.Picture := nil; // удаляем капчу, чтобы загрузить новую
end;


Откуда я взял username, submit и т.д? Из исходного кода страницы


[b]Для таймера 4 код

Код
var
a:string;
     S:TFileStream;
begin
idhttp1.HandleRedirects:=true; // разрешаем перенаправление
a:=IdHTTP1.Get(memo2.text); // посылаем get запрос на капчу из memo2
    S:=TFileStream.Create('captcha.jpg',FMCreate);    
    IdHTTP1.Get(memo2.text+'.jpg', S);   // получаем капчу из ссылки в memo2
     s.free; // освобождаем память, чтобы загружать новую капчу
Image1.Picture.LoadFromFile('captcha.jpg'); // загружаем капчу image
label1.Visible:=false;
    timer4.enabled:=false;
       end;


Для таймера 5 код
Код
// тут должно быть распознавание капчи, но пока это описывать не буду.


Для таймера 6 код
Код
var
a8:  variant;
    begin
     a8:=webbrowser1.oleobject.document.getelementbyid('agreed');  // я принимаю условия соглашени
     WebBrowser1.OleObject.Document.GetElementByID('agreed').Click;
     timer1.Enabled:=true;
timer6.enabled:=false;


Вот и все


Полный код:
Код
unit Unit1;

interface

uses
     Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
     Dialogs, StdCtrls, OleCtrls, SHDocVw, UrlMon, IdBaseComponent,
     IdComponent, IdTCPConnection, IdTCPClient, ExtCtrls,
     IdHTTP, AntiGate, XPMan, mshtml, jpeg;

type

     TForm1 = class(TForm)
       WebBrowser1: TWebBrowser;
       Button1: TButton;
       Memo1: TMemo;
       Timer1: TTimer;
       IdHTTP1: TIdHTTP;
       Image1: TImage;
       Timer2: TTimer;
       Memo2: TMemo;
       Timer3: TTimer;
       Edit1: TEdit;
       Edit2: TEdit;
       Edit3: TEdit;
       Edit4: TEdit;
       Timer4: TTimer;
       Timer6: TTimer;
       Label1: TLabel;
       XPManifest1: TXPManifest;
       Timer5: TTimer;

       procedure Button1Click(Sender: TObject);
       procedure FormCreate(Sender: TObject);
       procedure Timer1Timer(Sender: TObject);
       procedure Timer2Timer(Sender: TObject);
       procedure Timer3Timer(Sender: TObject);
       procedure Timer4Timer(Sender: TObject);
       procedure Timer6Timer(Sender: TObject);

     private
       { Private declarations }
     public

       { Public declarations }
     end;

var
     Form1: TForm1;

implementation

{$R *.dfm}

function Pars(T_, ForS, _T:string):string;
var a, b:integer;
begin
Result := '';
if (T_='') or (ForS='') or (_T='') then Exit;
a:=Pos(T_, ForS);
if a=0 then Exit else a:=a+Length(T_);
ForS:=Copy(ForS, a, Length(ForS)-a+1);
b:=Pos(_T, ForS);
if b>0 then
Result:=Copy(ForS, 1, b - 1);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
timer3.Enabled:=true;  // включаем таймер 3
     end;

procedure TForm1.FormCreate(Sender: TObject);
begin
    webbrowser1.Navigate('http://samp-rp.su/ucp.php?mode=register');
timer6.enabled:=true;
      end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
Doc:IHTMLDocument2;
S:string;
begin
while WebBrowser1.ReadyState<READYSTATE_COMPLETE do
begin
Application.ProcessMessages;
end;
Doc:= WebBrowser1.Document as IHTMLDocument2;
s:=doc.body.innerHTML;
Memo1.Text:=s;
timer2.enabled:=true;
timer1.enabled:=false;

end;

procedure TForm1.Timer2Timer(Sender: TObject);
var
stroka:string; // Объявляем переменную типа стринг.
begin
memo2.text:=memo1.Lines[97]; // в этой строке находится капча
stroka:=Pars('src="',memo2.Text,'"'); // Выполняем парсинг, от  src= в 97 строке
Memo2.Clear; // Отчищаем мемо.
Memo2.Lines.Add(stroka); // Выводим результат
timer4.enabled:=true;
    timer2.Enabled:=false;
end;

procedure TForm1.Timer3Timer(Sender: TObject);
var
a, a1, a2, a3, a4, a5, a6: variant;

    begin

     a1:=webbrowser1.oleobject.document.getelementbyid('username');  // заполняем поле с ником
     a1.value:=edit1.text;
        a2:=webbrowser1.oleobject.document.getelementbyid('email'); // понятно
     a2.value:=edit2.text;
      a3:=webbrowser1.oleobject.document.getelementbyid('email_confirm'); //понятно
     a3.value:=edit2.text;
      a4:=webbrowser1.oleobject.document.getelementbyid('new_password'); // пароль
     a4.value:=edit3.text;
     a5:=webbrowser1.oleobject.document.getelementbyid('password_confirm');
     a5.value:=edit3.text;
       a6:=webbrowser1.oleobject.document.getelementbyid('recaptcha_response_field');// капча
     a6.value:=edit4.text;

     a:=webbrowser1.oleobject.document.getelementbyid('submit');     // нажимаем регистрация

     WebBrowser1.OleObject.Document.GetElementByID('submit').Click;

     timer3.enabled:=false;
     timer6.enabled:=true;
     label1.visible:=true;
      webbrowser1.Navigate('http://samp-rp.su/ucp.php?mode=register');
Image1.Picture := nil;
end;

procedure TForm1.Timer4Timer(Sender: TObject);
var
a:string;
     S:TFileStream;
begin
idhttp1.HandleRedirects:=true; // разрешаем перенаправление
a:=IdHTTP1.Get(memo2.text);
    S:=TFileStream.Create('captcha.jpg',FMCreate);
    IdHTTP1.Get(memo2.text+'.jpg', S);   // получаем капчу из ссылки в memo2
     s.free;
Image1.Picture.LoadFromFile('captcha.jpg');
label1.Visible:=false;

    timer4.enabled:=false;

       end;

procedure TForm1.Timer6Timer(Sender: TObject);
var
a8:  variant;
    begin
     a8:=webbrowser1.oleobject.document.getelementbyid('agreed');  // я принимаю условия соглашени
     WebBrowser1.OleObject.Document.GetElementByID('agreed').Click;
     timer1.Enabled:=true;
timer6.enabled:=false;
end;
end.
Прикрепления: 4876898.jpg (71.1 Kb) · 1559236.jpg (117.2 Kb) · 5235847.jpg (15.3 Kb) · 5503614.jpg (26.9 Kb) · 1537298.jpg (172.9 Kb)


Delphi программирование
[Delphi]Узнаем координаты перса
BunnyHop для Steam/Non steam


Сообщение отредактировал Nikemmi - Четверг, 19.06.2014, 17:27
Kulibiaka Дата: Воскресенье, 10.08.2014, 12:15 | Сообщение # 2
I love DotA
Статус: Offline
Synapse круче

Продам группу в ВК 140k подписок!


[+] Skype: x.spacecrow.x
[+] ВКонтакте: id131508988
_Marcel_ Дата: Суббота, 30.08.2014, 14:55 | Сообщение # 3
Боец
Сообщений: 88
Статус: Offline
Цитата Kulibiaka ()
Synapse круче

Неа, сделал с помощью Synapse, капчу дает все время хуже чем на депозите, которую разгадать можно 1 раз из 10. Так что webbrowser намного лучше happy
  • Страница 1 из 1
  • 1
Поиск: