Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2015, 21:12   #21
_ZixeL_
Форумчанин
 
Регистрация: 04.11.2012
Сообщений: 151
По умолчанию

В общем, задачу решил таким вот способом. Может кому-то пригодится. Правда, не уверен, что так и надо, но работает.
Код:
Procedure Delay(mSec:Cardinal);
Var
  TargetTime:Cardinal;
Begin
      TargetTime:=GetTickCount+mSec;
      While TargetTime>GetTickCount Do
        begin
            Application.ProcessMessages;
            Sleep(1);
            If Application.Terminated then Exit;
        end;
End;


procedure TForm2.Button1Click(Sender: TObject);
var i,k:integer;
     html_tag: Variant;
begin
list:=0;
while list<>Memo1.Lines.Count do
begin
status:='';
try
    Form2.DeleteWebBrowserCache;
    Form2.CopyLP;
     Form2.Webbrowser1.Navigate('http://****.ру/');
      while Form2.WebBrowser1.ReadyState <> READYSTATE_COMPLETE do Application.ProcessMessages;

      if (Form2.WebBrowser1.OleObject.Document.all.tags('button').item(5).type='button') then Form2.WebBrowser1.OleObject.Document.all.tags('button').item(5).click;
      html_tag:=Form2.WebBrowser1.OleObject.Document.Forms.Item(4).Elements;
      If (html_tag.item(0).name='login') Then html_tag.item(0).value:=login;
      If (html_tag.item(1).name='passwd') Then html_tag.item(1).value:=pass;
      if (Form2.WebBrowser1.OleObject.Document.all.tags('button').item(10).type='submit') then Form2.WebBrowser1.OleObject.Document.all.tags('button').item(10).click;

     while Form2.WebBrowser1.ReadyState <> 3 do Application.ProcessMessages;

finally
Delay(6000);
\\тут код парсера
Memo1.Lines.Strings[list]:=status+' | '+Memo1.Lines.Strings[list];
list:=list+1;
if list=Memo1.Lines.Count then begin Form2.DeleteWebBrowserCache; Webbrowser1.Refresh;  end;

end;
end;
_ZixeL_ вне форума Ответить с цитированием
Старый 17.03.2015, 22:25   #22
_ZixeL_
Форумчанин
 
Регистрация: 04.11.2012
Сообщений: 151
По умолчанию

Только теперь новая проблема. Цикл прерывается, если два раза подряд логин и пароль неверные. Как исправить?
Continue не помогает.
_ZixeL_ вне форума Ответить с цитированием
Старый 20.03.2015, 22:39   #23
NIKOLAYY2
Форумчанин
 
Регистрация: 23.12.2014
Сообщений: 220
По умолчанию

Цитата:
Только теперь новая проблема. Цикл прерывается, если два раза подряд логин и пароль неверные.
Капча наверно появляется и все остальные твои запросы бессмысленны?
Если да то это защита сервера от подбора.

Меняй юзер-агент, чисти куки после каждого запроса и тд.
Тебя просто серверные скрипты "раскололи".
NIKOLAYY2 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как составить цикл (for) чтобы цикл работал пока RegExp.Match не будет пустым? FleXik Общие вопросы Delphi 11 05.03.2014 14:49
написать процедуры для “Цикл For ... Next ” и «Цикл Do ... Loop» по ниже приведенному условию Кристина_Патачиц Microsoft Office Excel 3 17.04.2013 17:01
Цикл по времени - Как сделать так чтобы цикл выполнялся к примеру 10 секунд ? Anarki Общие вопросы C/C++ 3 13.11.2009 19:23
Цикл с предусловием. ( цикл while) Цикл с постусловием. (цикл repeat ... until) Mr.User Помощь студентам 9 23.11.2007 01:34