Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 13.10.2019
Сообщений: 41

Капча VK

20.10.2019, 17:36. Показов 647. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Делаю приложение на Delphi и всё работает кроме одного - капча. Когда вылазит капча, я делаю повторный GET запрос:
Delphi
1
response:=send('GET', 'https://api.vk.com/method/wall.post?owner_id=-'+c_sid+'&message='+messagetext+'&access_token='+token+'&captcha_sid='+URLEncode(ansitoutf8(captcha_sid))+'&captcha_key='+URLEncode(ansitoutf8(key))+'&v=5.102');
Но ничего не получается. Пишет капча введена неверно. И так до бесконечности.
Это я ищу капчу
Delphi
1
2
3
4
5
6
7
8
9
 if FindCaptcha.Match[1]<>'' then
    begin
    Form1.Timer1.Enabled:=False;
    Form3.Show;
    Form3.WebBrowser1.Navigate('https://api.vk.com/captcha.php?sid='+FindCaptcha.Match[1]);
    captcha_sid:=FindCaptcha.Match[1];
    c_sid:=allid[number];
    showmessage(c_sid);
    end;
Это её отправка
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
procedure TForm3.Button1Click(Sender: TObject);
var key:string; Check:TRegExpr;
begin
edit1.Text:='';
key:=Edit1.Text;
response:=send('GET', 'https://api.vk.com/method/wall.post?owner_id=-'+c_sid+'&message='+messagetext+'&access_token='+token+'&captcha_sid='+URLEncode(ansitoutf8(captcha_sid))+'&captcha_key='+URLEncode(ansitoutf8(key))+'&v=5.102');
showmessage(c_sid);
showmessage(messagetext);
showmessage(token);
showmessage(captcha_sid);
showmessage(key);
Check:=TRegExpr.Create;
Check.Expression:='captcha_sid\":\"(\d.+?)\"';
Check.Exec(response);
If Check.Match[1]<>'' then
begin
ShowMessage('Íåïðàâèëüíî ââåäåíà êàïò÷à');
Form1.Timer1.Enabled:=False;
Form3.Close;
Form3.Show;
Form3.WebBrowser1.Navigate('https://api.vk.com/captcha.php?sid='+Check.Match[1]);
captcha_sid:=Check.Match[1];
end else
begin
msg:=response;
showmessage(msg);
Form1.Timer1.Enabled:=True;
Form3.Close;
end;
end;
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.10.2019, 17:36
Ответы с готовыми решениями:

Капча
Здравствуйте! Подскажите пожалуйста, возможно ли распознать данную капчу? цифры могут быть от 0 до 99. Как видно все цифры искорежены и...

Капча
Отправляю запрос на страницу с капчей и приходит такой ответ (что через программу, что через браузер): ‰PNG  IHDR...

Капча
как сделать на delphi чтобы я на эту красную точку нажал посмотрите http://www.dlh.net/public/images/dot.php? procedure...

2
 Аватар для GoodWeather
886 / 588 / 179
Регистрация: 28.02.2017
Сообщений: 2,359
Записей в блоге: 1
20.10.2019, 20:04
Вы для начала определитесь: send() или WebBrowser1.Navigate()... Есть подозрение, что лучше подобное не "мешать"...

Добавлено через 1 минуту
Что такое "FindCaptcha"? Какое конкретно "Match" оно выдаёт? Логирование бы вам прикрутить нормальное...

Добавлено через 16 секунд
А что такое кстати send()? Из каких библиотек сие?

Добавлено через 1 минуту
Вы этот "api.vk.com" кажется вручную дёргаете, не через какую-либо библиотеку/модуль?
0
1 / 1 / 0
Регистрация: 13.10.2019
Сообщений: 41
21.10.2019, 09:56  [ТС]
Тело главной программы
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Unit2, lib, ssl_openssl, httpsend, ExtCtrls;
 
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Log: TMemo;
    Groups: TListBox;
    Label1: TLabel;
    Label2: TLabel;
    Timing: TEdit;
    Label3: TLabel;
    Label4: TLabel;
    Button2: TButton;
    Button3: TButton;
    Timer1: TTimer;
    TextMessage: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  My:TMyThread;
 
implementation
 
uses Unit3;
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  My:=TMyThread.Create(true);
  My.Priority:=tpLower;
  My.FreeOnTerminate:=True;
  My.Resume;
  Button1.Enabled:=false;
  Edit1.Enabled:=false;
  Button2.Enabled:=True;
  Button3.Enabled:=True;
end;
 
 
procedure TForm1.Button2Click(Sender: TObject);
begin
my.parsgroups;
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
my.wallpost;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
button2.Enabled:=False;
button3.Enabled:=False;
end;
 
procedure TForm1.Button3Click(Sender: TObject);
begin
if Timer1.Enabled=False then
begin
Timer1.Interval:=strtoint(timing.text)*1000;
Timer1.Enabled:=True;
end else Timer1.Enabled:=False;
end;
 
end.
Это сам код в потоке
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
unit Unit2;
 
interface
 
uses
  Classes, SysUtils, Variants, Dialogs, StdCtrls, lib, ssl_openssl, httpsend, windows, Contnrs, ExtCtrls;
 
type
  TMyThread = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;
 
  public
    procedure parsgroups;
    procedure wallpost;
     procedure memoadd;
  end;
 
   var response, token,attachment: string; msg:ansistring;
       messagetext:ansistring; captcha_sid:string;
              allid:array [0..10000] of string;
           number:integer;
 
       
implementation
 
uses unit1,unit3, RegExpr;
 
procedure TMyThread.Execute;
var count, userid, s3,email,pass:string;
    user_id, s2,temp: array [0..2000] of string;
    i,j,r:integer;
begin
  explode(temp, ':', form1.edit1.text);
  email:=temp[0];
  pass:=temp[1];
 
  response:=send('GET', 'https://oauth.vk.com/token?grant_type=password&client_id=2274003&client_secret=hHbZxrka2uZ6jB1inYsH&username='+email+'&password='+pass+'&captcha_key=&captcha_sid=');
  msg:=response;
  //Synchronize(memoadd);
 
 if Pos('token', response)<>0 then begin
    s3:=copy(response, pos('access_token":"', response), pos('","expires_in', response)-3);
    delete(s3, 1, 15);
    token:=s3;   // token ïîëüçîâàòåëÿ
 
    msg:=token;
  //  Synchronize(MemoAdd);
 
    s3:=copy(response, pos('user_id":', response), pos('}', response));
    delete(s3, 1, 9);
    Delete(s3,pos('}',s3),1);
    userid:=s3;   // id ïîëüçîâàòåëÿ
 
    msg:='id:'+userid+' - àâòîðèçàöèÿ óñïåøíà';
    Synchronize(MemoAdd);
  end else begin
    msg:='Íå àâòîðèçîâàëñÿ';
    Synchronize(MemoAdd);
  end;
 
end;
 
 
 
procedure TMyThread.memoadd;
begin
  Form1.Log.Lines.Add(msg);
end;
 
procedure TMyThread.parsgroups;
var hint:ansistring;   j:integer;
 
    GroupIDs, CanWallPost:TRegExpr;
begin
//ïîèñê ãðóïï ñ íàçâàíèåì "Îáìåí ëàéêàìè"
hint:=ansitoutf8('Îáìåí%20ëàéêàìè');
response:=send('GET', 'https://api.vk.com/method/groups.search?q='+hint+'&count=50&sort=2&access_token='+token+'&v=5.102');
 
//îòáîð ãðóïï ñ âîçìîæíîñòüþ îñòàâëåíèÿ çàïèñåé íà ñòåíå
GroupIDs:=TRegExpr.Create;
GroupIDs.Expression:='id\":(\d+.?),\"';
    j:=0;
    if GroupIDs.Exec(response) then
      begin
      repeat
      response:=send('GET', 'https://api.vk.com/method/groups.getById?group_id='+GroupIDs.Match[1]+'&fields=can_post&access_token='+token+'&v=5.102');
      CanWallPost:=TRegExpr.Create;
      CanWallPost.Expression:='can_post\":(.+?),\"';
      CanWallPost.Exec(response);
      if CanWallPost.Match[1]=inttostr(1) then
        begin
        allid[j]:=GroupIDs.Match[1];
        Form1.Groups.Items.Add(allid[j]);
        inc(j);
        end;
 
      until not GroupIDs.ExecNext;
      end;
 
 
//msg:=response;
//synchronize(memoadd);
 
end;
 
procedure TMyThread.wallpost;
var FindCaptcha:TRegExpr;
begin
FindCaptcha:=TRegExpr.Create;
FindCaptcha.Expression:='captcha_sid\":\"(\d.+?)\"';
messagetext:=ansitoutf8(Form1.TextMessage.Text);
messagetext:=StringReplace(messagetext,' ','%20',[rfReplaceAll, rfIgnoreCase]);
 
if allid[number]<>inttostr(0) then
  begin
  response:=send('GET', 'https://api.vk.com/method/wall.post?owner_id=-'+allid[number]+'&message='+messagetext+'&access_token='+token+'&v=5.102');
  msg:=response;
  synchronize(memoadd);
  FindCaptcha.Exec(response);
  if FindCaptcha.Match[1]<>'' then
    begin
    Form1.Timer1.Enabled:=False;
    Form3.Show;
    Form3.WebBrowser1.Navigate('https://api.vk.com/captcha.php?sid='+FindCaptcha.Match[1]);
    captcha_sid:=FindCaptcha.Match[1];
    c_sid:=allid[number];
    showmessage(c_sid);
    end;
 
  inc(number);
  end else begin number:=0; Form1.Timer1.Enabled:=False; end;
end;
 
end.
А это код формы с вводом капчи
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
unit Unit3;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, lib, ssl_openssl, httpsend,unit2, OleCtrls,
  SHDocVw, jpeg, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdHTTP;
 
type
  TForm3 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    WebBrowser1: TWebBrowser;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form3: TForm3;
  c_sid:string;
 
implementation
uses Unit1, RegExpr;
 
{$R *.dfm}
 
procedure TForm3.Button1Click(Sender: TObject);
var key:string; Check:TRegExpr;
begin
edit1.Text:='';
key:=Edit1.Text;
response:=send('GET', 'https://api.vk.com/method/wall.post?owner_id=-'+c_sid+'&message='+messagetext+'&access_token='+token+'&captcha_sid='+URLEncode(ansitoutf8(captcha_sid))+'&captcha_key='+URLEncode(ansitoutf8(key))+'&v=5.102');
showmessage(c_sid);
showmessage(messagetext);
showmessage(token);
showmessage(captcha_sid);
showmessage(key);
Check:=TRegExpr.Create;
Check.Expression:='captcha_sid\":\"(\d.+?)\"';
Check.Exec(response);
If Check.Match[1]<>'' then
begin
ShowMessage('Íåïðàâèëüíî ââåäåíà êàïò÷à');
Form1.Timer1.Enabled:=False;
Form3.Close;
Form3.Show;
Form3.WebBrowser1.Navigate('https://api.vk.com/captcha.php?sid='+Check.Match[1]);
captcha_sid:=Check.Match[1];
end else
begin
msg:=response;
showmessage(msg);
Form1.Timer1.Enabled:=True;
Form3.Close;
end;
end;
 
 
end.
Ниже приложил архив с софтом
Вложения
Тип файла: rar VkPro.rar (994.9 Кб, 2 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.10.2019, 09:56
Помогаю со студенческими работами здесь

Капча
Всем привет. ближе к делу. У нас есть .txt документ с него нужно брать построчно что там находится не пропуская ни одной строчки. В...

Капча
Как вывести капчу в edit ? Дайте пример. С меня + :) var postdata:tstringlist; begin postdata:=TSTringList.Create; ...

Капча ВКонтакте
Здравствуйте, подскажите пожалуйста, как получить капчу Вконтакте из webbrowser? Если не трудно, помогите прикрутить antigate к этому...

Яндекс капча
имеется код: end else if pos ('captcha',response)&lt;&gt;0 then begin Он означает, если в response найдено слово captcha, значит должно...

Капча Вконтакте API. (прямая авторизация)
Делаю приложение на Delphi и всё работает кроме одного - капча. Когда вылазит капча, я делаю повторный GET запрос...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru