![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Здравствуйте.
Пишу программу, есть такой обработчик клика по кнопке: Код:
procedure TForm2.Button11Click(Sender: TObject); var U,P : Variant; form:olevariant; f,i:Integer; r: TRegExpr; Doc : IHTMLDocument2; s:string; begin WebBrowser1.Navigate('http://web.iqsms.ru/login/?next=/contacts/'); while WebBrowser1.ReadyState<>4 do Application.ProcessMessages; U:=webbrowser1.oleobject.document.getelementbyid('id_username'); U.value:=Edit3.Text; P:=webbrowser1.oleobject.document.getelementbyid('id_password'); P.value:=Edit4.Text; //U.style.display := 'block'; //P.style.display := 'block'; for f:=0 to WebBrowser1.OleObject.Document.forms.Length-1 do begin form:=WebBrowser1.OleObject.Document.forms.Item(f).elements; for i:=0 to form.Length-1 do if (form.item(i).type='submit') then begin form.item(i).click; end; end; WebBrowser1.Navigate('http://web.iqsms.ru/contacts/'); while WebBrowser1.ReadyState<>4 do Application.ProcessMessages; Doc := WebBrowser1.Document as IHTMLDocument2; // получили hmtl код страницы r := TRegExpr.Create; s:=Doc.body.innerHTML; r.InputString :=s; // во входяшую строку положили весь html код memo3.Text:=s; try r.Expression :='<A href="/deliveries/add-delivery/">(.*?)</A>'; if r.Exec(s) then begin Groupbox8.Caption:='Отправить смс заказчику'; end else ShowMessage('Авторизация не прошла'); finally r.Free; end; end; Суть кода: должна произойти авторизация на сайте http://web.iqsms.ru/login/?next=/contacts/ Вот так вот происходит заполнение полей логина и пароля и нажимается кнопка "Войти": Код:
procedure TForm2.Button11Click(Sender: TObject); var U,P : Variant; form:olevariant; f,i:Integer; r: TRegExpr; Doc : IHTMLDocument2; s:string; begin WebBrowser1.Navigate('http://web.iqsms.ru/login/?next=/contacts/'); while WebBrowser1.ReadyState<>4 do Application.ProcessMessages; U:=webbrowser1.oleobject.document.getelementbyid('id_username'); U.value:=Edit3.Text; P:=webbrowser1.oleobject.document.getelementbyid('id_password'); P.value:=Edit4.Text; //U.style.display := 'block'; //P.style.display := 'block'; for f:=0 to WebBrowser1.OleObject.Document.forms.Length-1 do begin form:=WebBrowser1.OleObject.Document.forms.Item(f).elements; for i:=0 to form.Length-1 do if (form.item(i).type='submit') then begin form.item(i).click; end; end; Но как только я пытаюсь проверить, зашли мы или нет, дописывая код: Код:
WebBrowser1.Navigate('http://web.iqsms.ru/contacts/'); while WebBrowser1.ReadyState<>4 do Application.ProcessMessages; Doc := WebBrowser1.Document as IHTMLDocument2; // получили hmtl код страницы r := TRegExpr.Create; s:=Doc.body.innerHTML; r.InputString :=s; // во входяшую строку положили весь html код memo3.Text:=s; try r.Expression :='<A href="/deliveries/add-delivery/">(.*?)</A>'; if r.Exec(s) then begin Groupbox8.Caption:='Отправить смс заказчику'; end else ShowMessage('Авторизация не прошла'); finally r.Free; end; end; То вылазит ошибка: и подсвечивается строка: Код:
U.value:=Edit3.Text; Как я только не пробовал проверять, вошли мы или нет, получаю такую ошибку. Помогите, пожалуйста. |
#2
|
||||
|
||||
![]() Цитата:
Пример проверки был ли найден элемент у которого id имеет значение "id_username": Код:
U:=webbrowser1.oleobject.document.getelementbyid('id_username'); if not Assigned(U) then raise Exception.Create('Элемент с id "id_username" не найден'); U.value:=Edit3.Text; |
#3
|
|||
|
|||
![]() Я же говорю, что половинный код, т.е код, который заполняет по id поля логин и пароль - работает, далее код, который нажимает на "войти" - работает, а когда я пытаюсь проверить вошли мы или нет, т.е как-то зацепиться за элементы страницы, то выдает ошибку.
Я еще пробовал сделать через проверку url, т.е если вошли, то проверяем через Location.Url урл страницы, если он совпадает с тем, который я указал, то вошли. Так что я, если честно, не понял про проверку id. Потому как эти 2 элемента id_username и id_password 100% есть, так как они заполняются. |
#4
|
||||
|
||||
![]() Цитата:
Цитата:
Цитата:
|
#5
|
|||
|
|||
![]() Цитата:
Попробовал вставить ваш код. Ошибку дает: [Error] Unit2.pas(605): Incompatible types |
#6
|
|||
|
|||
![]() Цитата:
Но ошибка вылазит после добавления кода проверки на "зашли или нет". Т.е закрываю это окно с ошибкой и синим цветом подсвечивается та строка, которую я указал. |
#7
|
||||
|
||||
![]() Цитата:
Код:
if VarIsClear(U) then raise Exception.Create('Элемент с id "id_username" не найден'); |
#8
|
|||
|
|||
![]() Цитата:
Сделал, теперь ошибки нет, но поля перестали заполняться и кнопка не нажимается, но зато выскакивает ShowMessage Авторизация не прошла. |
#9
|
|||
|
|||
![]() Может когда я второй раз перехожу по адресу опять идет поиск этих полей, но почему? Я ничего не понимаю.
|
#10
|
||||
|
||||
![]() Цитата:
Может перестало заполняться так как стали появляться ошибки типа "Элемент с id "id_username" не найден" - тогда конечно - это срабатывают проверки и заполняться при этом не должно, так как некуда. Цитата:
|
#11
|
|||
|
|||
![]() Да.. сложно поверить, но это так.
Если из обработчика удалить этот код: Код:
WebBrowser1.Navigate('http://web.iqsms.ru/contacts/'); while WebBrowser1.ReadyState<>4 do Application.ProcessMessages; Doc := WebBrowser1.Document as IHTMLDocument2; // получили hmtl код страницы r := TRegExpr.Create; s:=Doc.body.innerHTML; r.InputString :=s; // во входяшую строку положили весь html код memo3.Text:=s; try r.Expression :='<A href="/deliveries/add-delivery/">(.*?)</A>'; if r.Exec(s) then begin Groupbox8.Caption:='Отправить смс заказчику'; end else ShowMessage('Авторизация не прошла'); finally r.Free; end; end; То происходит заполнение полей и нажимается кнопка входа. (Я это в webbrowser'е вижу, т.е происходит авторизация, а когда добавляю этот код, то не происходит и пишет "Авторизация не прошла") |
#12
|
|||
|
|||
![]() Да, вот если убрать тот код, который я написал выше, то работает и авторизация проходит, если еще раз нажать "войти" с теми же данными, то прога вываливается на вашей проверке, что естественно, потому как страница открылась другая и естественно этих полей с таким id там нет.
|
#13
|
|||
|
|||
![]() Помогите..пожалуйста
|
#14
|
||||
|
||||
![]() Цитата:
Других недочётов я пока не вижу. |
#15
|
|||
|
|||
![]() Цитата:
Бред, вчера работало с вашими проверками, а сегодня не может найти id_username, хотя на сайте ничего не поменялось.. |