Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Программа для работы с сайтом (http://forum.oszone.net/showthread.php?t=183873)

CJ F.A.N. 26-08-2010 07:36 1481898

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

Delirium 26-08-2010 08:08 1481912

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

RUVATA 26-08-2010 08:10 1481913

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

Опиши ситуацию по подробнее... может что придумаем

CJ F.A.N. 26-08-2010 08:29 1481923

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

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

Sham 26-08-2010 08:53 1481938

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

RUVATA 26-08-2010 09:15 1481946

А эти самые юзвери... кроме этого сайта и-нет используют... я имею виду браузерами пользуются...
Если Да, то решение в приципе простое:
ты из проги запускаешь браузер с параметрами... (предварительно в браузере, сохранив условия входа на сайт)
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. 26-08-2010 10:26 1481997

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

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

ganselo 27-08-2010 00:53 1482639

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

DedAlex 27-08-2010 13:54 1482917

CJ F.A.N., посмотрите здесь и более общее здесь

CJ F.A.N. 01-09-2010 08:36 1486198

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;

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


Время: 11:13.

Время: 11:13.
© OSzone.net 2001-