Delphi - [решено] Программа для работы с сайтом

Ответить
Аватара пользователя
CJ F.A.N.

Delphi - [решено] Программа для работы с сайтом

Сообщение CJ F.A.N. »

Всем привет! Никогда не делал программы такого направления, но пришлось. Есть сайт
http://www.orenfoms.ru/
. Необходима программа для работы с этим сайтом. Задача в том чтобы авторизоваться на сайте, и из программы (из полей ввода текста)передать данные в нужные поля которые расположены на странице, и программно нажать кнопку на странице. Все бы ничего, но не могу авторизоваться на сайте, много кодов перепробовал. Подскажите если можете ;-) Заранее спасибо
Аватара пользователя
Delirium

Re: Delphi - [решено] Программа для работы с сайтом

Сообщение Delirium »

Не получается именно авторизоваться, или же послать запрос на авторизацию?
Аватара пользователя
RUVATA

Re: Delphi - [решено] Программа для работы с сайтом

Сообщение RUVATA »

вообще то авторизация, на то и авторизация... обычно все специально предусмотрено так, чтобы ее не реально было пройти автоматически... защищаясь от злодейских ботов или хаков-самоучек Изображение

Скорее всего тебе не удастся решить эту проблему программным путем, по крайней мере без содействия разработчиков сайта.



Опиши ситуацию по подробнее... может что придумаем
Аватара пользователя
CJ F.A.N.

Re: Delphi - [решено] Программа для работы с сайтом

Сообщение CJ F.A.N. »

В общем, так. Везде примеры авторизации с работой PHP страниц, там все в принципе просто, а тут сама кнопка, точнее ссылка Войти - это ява скрипт, я в этом не силен. Есть идея - просто открыть страницу в TWebBrowser, и программно заполнить поля Имя и Пароль, и нажать ссылку Войти. Но как это сделать?



Программу делаю для больницы))) Просто сами понимаете, люди часто ошибаются, вводят не то что надо, потом звонят и говорят что не работает, приходится бежать и объяснять что да как. С программой будет проще, ибо идея в том что как программа откроется, и появляется сразу форма с необходимыми полями для ввода
Аватара пользователя
Sham

Re: Delphi - [решено] Программа для работы с сайтом

Сообщение Sham »

Отследите заголовки (в ff c плугином), и делайте такой же запрос своим софтом, принимая кукисы. Думайте на уровне протокола, а не кнопочек...
Аватара пользователя
RUVATA

Re: Delphi - [решено] Программа для работы с сайтом

Сообщение RUVATA »

А эти самые юзвери... кроме этого сайта и-нет используют... я имею виду браузерами пользуются...

Если Да, то решение в приципе простое:

ты из проги запускаешь браузер с параметрами... (предварительно в браузере, сохранив условия входа на сайт)

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()
        '           запуск процесса.

вот так...
Аватара пользователя
CJ F.A.N.

Re: Delphi - [решено] Программа для работы с сайтом

Сообщение CJ F.A.N. »

Спасибо! Ну я тут уже кое что намудрил, единственное что интересует теперь, это следующее. Ну допустим на сайте Два поля ввода текста. Как к ним получить доступ зная их имя? Ну вот например,



WebBrowser1.OleObject.Document.all('ctl00$LoginViewCtrl$Login1$UserName').value:='Имя'; - это я пытался заполнить поле для ввода имени. Но не работает. А как правильно надо?
Аватара пользователя
ganselo

Re: Delphi - [решено] Программа для работы с сайтом

Сообщение ganselo »

CJ F.A.N., берёте какой нибудь снифер (браузерный или обычный... не важно). Снифаете данные при нажатии на какой нибудь элемент формы (форма авторизации например). Далее в программе воспроизводите этот запрос с помощью Winsock, WinInet, TNMHTTP, TIdHTTP.
Аватара пользователя
CJ F.A.N.

Re: Delphi - [решено] Программа для работы с сайтом

Сообщение CJ F.A.N. »

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;

Очень полезные ссылки, а то сколько не искал примеров, там ничего подходящего не оказалось! Проблема решена!
Ответить

Вернуться в «Программирование и базы данных»