|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - [решено] Программа для работы с сайтом |
|
Delphi - [решено] Программа для работы с сайтом
|
![]() Ветеран Сообщения: 565 |
Всем привет! Никогда не делал программы такого направления, но пришлось. Есть сайт http://www.orenfoms.ru/. Необходима программа для работы с этим сайтом. Задача в том чтобы авторизоваться на сайте, и из программы (из полей ввода текста)передать данные в нужные поля которые расположены на странице, и программно нажать кнопку на странице. Все бы ничего, но не могу авторизоваться на сайте, много кодов перепробовал. Подскажите если можете ;-) Заранее спасибо
|
|
Отправлено: 07:36, 26-08-2010 |
Ветеран Сообщения: 5624
|
Профиль | Отправить PM | Цитировать Не получается именно авторизоваться, или же послать запрос на авторизацию?
|
------- Отправлено: 08:08, 26-08-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
![]() Старожил Сообщения: 301
|
Профиль | Отправить PM | Цитировать вообще то авторизация, на то и авторизация... обычно все специально предусмотрено так, чтобы ее не реально было пройти автоматически... защищаясь от злодейских ботов или хаков-самоучек
![]() Скорее всего тебе не удастся решить эту проблему программным путем, по крайней мере без содействия разработчиков сайта. Опиши ситуацию по подробнее... может что придумаем |
------- Отправлено: 08:10, 26-08-2010 | #3 |
![]() Ветеран Сообщения: 565
|
Профиль | Сайт | Отправить PM | Цитировать В общем, так. Везде примеры авторизации с работой PHP страниц, там все в принципе просто, а тут сама кнопка, точнее ссылка Войти - это ява скрипт, я в этом не силен. Есть идея - просто открыть страницу в TWebBrowser, и программно заполнить поля Имя и Пароль, и нажать ссылку Войти. Но как это сделать?
Программу делаю для больницы))) Просто сами понимаете, люди часто ошибаются, вводят не то что надо, потом звонят и говорят что не работает, приходится бежать и объяснять что да как. С программой будет проще, ибо идея в том что как программа откроется, и появляется сразу форма с необходимыми полями для ввода |
------- Отправлено: 08:29, 26-08-2010 | #4 |
Deadooshka Сообщения: 2517
|
Профиль | Отправить PM | Цитировать Отследите заголовки (в ff c плугином), и делайте такой же запрос своим софтом, принимая кукисы. Думайте на уровне протокола, а не кнопочек...
|
|
Отправлено: 08:53, 26-08-2010 | #5 |
![]() Старожил Сообщения: 301
|
Профиль | Отправить PM | Цитировать А эти самые юзвери... кроме этого сайта и-нет используют... я имею виду браузерами пользуются...
Если Да, то решение в приципе простое: ты из проги запускаешь браузер с параметрами... (предварительно в браузере, сохранив условия входа на сайт) Delphi - не знаю... пишу на vb.NET у меня это выглядит так: возьмем на примере того-же forum.ozone.net у меня в браузере сохранены условия входа (запомнен пароль и логин) ежели я из проги запускаю процесс с атрибутом URL сайта - то открывается браузер на этой страничке, уже прошедший авторизацию Dim MyProcess As New Process MyProcess.StartInfo.FileName = "MzF" ' StartInfo.FileName - если приложение не описанно в sys.переменной PATH, у меня описанно как MzF ' то указывать полное имя к программе... н\п "C:\Program Files\Mozilla Firefox\firefox.exe" MyProcess.StartInfo.Arguments = "forum.ozone.net" MyProcess.Start() ' запуск процесса. |
------- Отправлено: 09:15, 26-08-2010 | #6 |
![]() Ветеран Сообщения: 565
|
Профиль | Сайт | Отправить PM | Цитировать Спасибо! Ну я тут уже кое что намудрил, единственное что интересует теперь, это следующее. Ну допустим на сайте Два поля ввода текста. Как к ним получить доступ зная их имя? Ну вот например,
WebBrowser1.OleObject.Document.all('ctl00$LoginViewCtrl$Login1$UserName').value:='Имя'; - это я пытался заполнить поле для ввода имени. Но не работает. А как правильно надо? |
------- Отправлено: 10:26, 26-08-2010 | #7 |
![]() Старожил Сообщения: 232
|
Профиль | Сайт | Отправить PM | Цитировать CJ F.A.N., берёте какой нибудь снифер (браузерный или обычный... не важно). Снифаете данные при нажатии на какой нибудь элемент формы (форма авторизации например). Далее в программе воспроизводите этот запрос с помощью Winsock, WinInet, TNMHTTP, TIdHTTP.
|
------- Отправлено: 00:53, 27-08-2010 | #8 |
Вредитель Сообщения: 460
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 13:54, 27-08-2010 | #9 |
![]() Ветеран Сообщения: 565
|
Профиль | Сайт | Отправить PM | Цитировать DedAlex, огромное спасибо, ссылки помогли!
Помогли вот эти процедуры: function tform1.GetFormByNumber(document: IHTMLDocument2; formNumber: integer): IHTMLFormElement; var forms: IHTMLElementCollection; begin forms := document.Forms as IHTMLElementCollection; if formNumber < forms.Length then result := forms.Item(formNumber,'') as IHTMLFormElement else result := nil; end; procedure tform1.SetFieldValue(theForm: IHTMLFormElement; const fieldName: string; const newValue: string; const instance: integer=0); var field: IHTMLElement; inputField: IHTMLInputElement; selectField: IHTMLSelectElement; textField: IHTMLTextAreaElement; begin field := theForm.Item(fieldName,instance) as IHTMLElement; if Assigned(field) then begin if field.tagName = 'INPUT' then begin inputField := field as IHTMLInputElement; if (inputField.type_ <> 'radio') and (inputField.type_ <> 'checkbox') then inputField.value := newValue else inputField.checked := (newValue = 'checked'); end else if field.tagName = 'SELECT' then begin selectField := field as IHTMLSelectElement; selectField.value := newValue; end else if field.tagName = 'TEXTAREA' then begin textField := field as IHTMLTextAreaElement; textField.value := newValue; end; end; end;[/b] Потом просто сделал дополнительную процедуру Autologin: [b]procedure tform1.autologin; var document: IHTMLDocument2; theForm: IHTMLFormElement; begin document := WebBrowser1.Document as IHTMLDocument2; theForm := GetFormByNumber(WebBrowser1.Document as IHTMLDocument2,0); SetFieldValue(theForm,'Имя поля ввода логина','Имя пользователя'); form1.prog.Progress:= 4; SetFieldValue(theForm,'Имя поля ввода пароля','Пароль'); form1.prog.Progress:= 3; webbrowser1.Navigate('А тут код той ссылки, нажав на которую происходил вход на сайт. Тут Ява скрипт был какой то'); form1.prog.Progress:= 6; ready:= false; end; |
------- Последний раз редактировалось Drongo, 01-09-2010 в 11:10. Причина: Использовать тег код - # Отправлено: 08:36, 01-09-2010 | #10 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Wireless - Программа для работы с WiFI | _Kaban_ | Сетевое оборудование | 3 | 28-01-2010 14:49 | |
[решено] Программа для работы с векторной графикой | Naiad | Программное обеспечение Linux и FreeBSD | 4 | 14-11-2008 18:41 | |
ПРограмма для работы с видео файлами .mkv | D.A.E. | Программное обеспечение Windows | 1 | 24-03-2008 00:39 | |
программа для работы с Apparmor | vol4enok | Программное обеспечение Linux и FreeBSD | 0 | 01-05-2007 00:25 | |
Программа для работы с телефоном на ПК | Qwe1 | Мобильные ОС, смартфоны и планшеты | 2 | 26-09-2006 22:42 |
|