Delphi - [решено] Программа для работы с сайтом
-
CJ F.A.N.
Delphi - [решено] Программа для работы с сайтом
Всем привет! Никогда не делал программы такого направления, но пришлось. Есть сайт
Заранее спасибо
http://www.orenfoms.ru/
. Необходима программа для работы с этим сайтом. Задача в том чтобы авторизоваться на сайте, и из программы (из полей ввода текста)передать данные в нужные поля которые расположены на странице, и программно нажать кнопку на странице. Все бы ничего, но не могу авторизоваться на сайте, много кодов перепробовал. Подскажите если можете -
Delirium
Re: Delphi - [решено] Программа для работы с сайтом
Не получается именно авторизоваться, или же послать запрос на авторизацию?
-
RUVATA
Re: Delphi - [решено] Программа для работы с сайтом
вообще то авторизация, на то и авторизация... обычно все специально предусмотрено так, чтобы ее не реально было пройти автоматически... защищаясь от злодейских ботов или хаков-самоучек
Скорее всего тебе не удастся решить эту проблему программным путем, по крайней мере без содействия разработчиков сайта.
Опиши ситуацию по подробнее... может что придумаем
Скорее всего тебе не удастся решить эту проблему программным путем, по крайней мере без содействия разработчиков сайта.
Опиши ситуацию по подробнее... может что придумаем
-
CJ F.A.N.
Re: Delphi - [решено] Программа для работы с сайтом
В общем, так. Везде примеры авторизации с работой PHP страниц, там все в принципе просто, а тут сама кнопка, точнее ссылка Войти - это ява скрипт, я в этом не силен. Есть идея - просто открыть страницу в TWebBrowser, и программно заполнить поля Имя и Пароль, и нажать ссылку Войти. Но как это сделать?
Программу делаю для больницы))) Просто сами понимаете, люди часто ошибаются, вводят не то что надо, потом звонят и говорят что не работает, приходится бежать и объяснять что да как. С программой будет проще, ибо идея в том что как программа откроется, и появляется сразу форма с необходимыми полями для ввода
Программу делаю для больницы))) Просто сами понимаете, люди часто ошибаются, вводят не то что надо, потом звонят и говорят что не работает, приходится бежать и объяснять что да как. С программой будет проще, ибо идея в том что как программа откроется, и появляется сразу форма с необходимыми полями для ввода
-
Sham
Re: Delphi - [решено] Программа для работы с сайтом
Отследите заголовки (в ff c плугином), и делайте такой же запрос своим софтом, принимая кукисы. Думайте на уровне протокола, а не кнопочек...
-
RUVATA
Re: Delphi - [решено] Программа для работы с сайтом
А эти самые юзвери... кроме этого сайта и-нет используют... я имею виду браузерами пользуются...
Если Да, то решение в приципе простое:
ты из проги запускаешь браузер с параметрами... (предварительно в браузере, сохранив условия входа на сайт)
Delphi - не знаю... пишу на vb.NET
у меня это выглядит так:
возьмем на примере того-же forum.ozone.net
у меня в браузере сохранены условия входа (запомнен пароль и логин)
ежели я из проги запускаю процесс с атрибутом URL сайта - то открывается браузер на этой страничке, уже прошедший авторизацию
Код:
вот так...
Если Да, то решение в приципе простое:
ты из проги запускаешь браузер с параметрами... (предварительно в браузере, сохранив условия входа на сайт)
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 - [решено] Программа для работы с сайтом
Спасибо! Ну я тут уже кое что намудрил, единственное что интересует теперь, это следующее. Ну допустим на сайте Два поля ввода текста. Как к ним получить доступ зная их имя? Ну вот например,
WebBrowser1.OleObject.Document.all('ctl00$LoginViewCtrl$Login1$UserName').value:='Имя'; - это я пытался заполнить поле для ввода имени. Но не работает. А как правильно надо?
WebBrowser1.OleObject.Document.all('ctl00$LoginViewCtrl$Login1$UserName').value:='Имя'; - это я пытался заполнить поле для ввода имени. Но не работает. А как правильно надо?
-
ganselo
Re: Delphi - [решено] Программа для работы с сайтом
CJ F.A.N., берёте какой нибудь снифер (браузерный или обычный... не важно). Снифаете данные при нажатии на какой нибудь элемент формы (форма авторизации например). Далее в программе воспроизводите этот запрос с помощью Winsock, WinInet, TNMHTTP, TIdHTTP.
-
DedAlex
-
CJ F.A.N.
Re: Delphi - [решено] Программа для работы с сайтом
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;Очень полезные ссылки, а то сколько не искал примеров, там ничего подходящего не оказалось! Проблема решена!