![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Доброго всем дня
Проблема в следующем: На неком сайте есть кнопка и пара полей ввода даты. При нажатии на нее, сервер выдает таблицы в виде текста в окне браузера. Изначально на странице есть некая шапка, ниже которой потом приписываются эти таблицы. Суть вот в чем: во втором потоке постоянно проверяеть наличие некой фразы в тексте вебстраницы, и, если кусок фразы присутствует, копировать весь текст в Memo1. Не имею представления как сделать в 1 поток, поэтому стал делать в 2. Если в 1 поток, по при нажатии на кнопку запроса этой таблицы, программа сперва выполнить все sleep и задержки по таймеру, а уж потом отправит запрос на сервер и получит эту таблицу. Я делаю примерно следующее: Код:
procedure TForm1.Button1Click(Sender: TObject); var MSt, MEnd: string; xHWND, LoginHTML_id, PasswordHTML_id, ButtonHTML_id, HTML_id: variant; HTMLDocument: IHTMLDocument3; StChar: PAnsiChar; len: integer; begin MSt := ''; MEnd := ''; If Edit1.Text<>'' then MSt := Edit1.Text else begin showmessage(''); exit; end; If Edit2.Text<>'' then MEnd := Edit2.Text else begin showmessage(''); exit; end; WebBrowser1.Navigate('http://anywebsite.com'); while WebBrowser1.ReadyState<READYSTATE_COMPLETE do Application.ProcessMessages; HTMLDocument:=WebBrowser1.Document as IHTMLDocument3; //заполняем все необходимые поля и кликаем кнопку LoginHTML_id := HTMLDocument.getElementById(''); LoginHTML_id.value := ''; PasswordHTML_id := HTMLDocument.getElementById(''); PasswordHTML_id.value := ''; sleep (50); ButtonHTML_id := HTMLDocument.getElementById(''); ButtonHTML_id.click; sleep (50); //в этом месте осуществляется переход на новую страницу HTMLDocument:=WebBrowser1.Document as IHTMLDocument3; HTMLDocument.getElementById('').click; HTML_id := HTMLDocument.getElementById(''); HTML_id.value := MSt; HTML_id := HTMLDocument.getElementById(''); HTML_id.value := MEnd; HTML_id := HTMLDocument.getElementById(''); HTML_id.click; //Сперва почему-то выполняется все sleep, а уж потом жмется кнопка.... sleep (100); Далее, во втором потоке, пытаюсь отслеживать изменение страницы (получается не очень) Код:
procedure TNewThread.Execute; var HTMLDocument: IHTMLDocument3; begin while Form1.WebBrowser1.ReadyState<READYSTATE_COMPLETE do Application.ProcessMessages; HTMLDocument:=Form1.WebBrowser1.Document as IHTMLDocument3; while pos('некая строка', Form1.Memo1.Lines.Text) = 0 do begin HTMLDocument:=Form1.WebBrowser1.Document as IHTMLDocument3; Form1.Memo1.Text := HTMLDocument.documentElement.innerText; end; end ; procedure TForm1.Button4Click(Sender: TObject); var NewThread: TNewThread; begin NewThread:=TNewThread.Create(true); NewThread.FreeOnTerminate:=true; NewThread.Priority:=tpLower; NewThread.Resume; end; Что делаю не так? Может какие-то варианты еще есть? Последний раз редактировалось Darjeeling, 05.12.2011 в 15:11. Причина: Добавление информации |
#2
|
|||
|
|||
![]() В идеале конечно хотелось сделать, чтобы оба потока запускались по нажатию 1 кнопки.
голову сломал. Таблица грузится (примерно секунд за 5) на страничку, а вот процесс поиска и копирования никак не желает. Вылетает с ошибкой обращения к пустому блоку памяти.... |