Показать полную графическую версию : [решено] Программа для работы с сайтом
CJ F.A.N.
26-08-2010, 07:36
Всем привет! Никогда не делал программы такого направления, но пришлось. Есть сайт http://www.orenfoms.ru/. Необходима программа для работы с этим сайтом. Задача в том чтобы авторизоваться на сайте, и из программы (из полей ввода текста)передать данные в нужные поля которые расположены на странице, и программно нажать кнопку на странице. Все бы ничего, но не могу авторизоваться на сайте, много кодов перепробовал. Подскажите если можете ;-) Заранее спасибо
Delirium
26-08-2010, 08:08
Не получается именно авторизоваться, или же послать запрос на авторизацию?
вообще то авторизация, на то и авторизация... обычно все специально предусмотрено так, чтобы ее не реально было пройти автоматически... защищаясь от злодейских ботов или хаков-самоучек :ninja2:
Скорее всего тебе не удастся решить эту проблему программным путем, по крайней мере без содействия разработчиков сайта.
Опиши ситуацию по подробнее... может что придумаем
CJ F.A.N.
26-08-2010, 08:29
В общем, так. Везде примеры авторизации с работой PHP страниц, там все в принципе просто, а тут сама кнопка, точнее ссылка Войти - это ява скрипт, я в этом не силен. Есть идея - просто открыть страницу в TWebBrowser, и программно заполнить поля Имя и Пароль, и нажать ссылку Войти. Но как это сделать?
Программу делаю для больницы))) Просто сами понимаете, люди часто ошибаются, вводят не то что надо, потом звонят и говорят что не работает, приходится бежать и объяснять что да как. С программой будет проще, ибо идея в том что как программа откроется, и появляется сразу форма с необходимыми полями для ввода
Отследите заголовки (в ff c плугином), и делайте такой же запрос своим софтом, принимая кукисы. Думайте на уровне протокола, а не кнопочек...
А эти самые юзвери... кроме этого сайта и-нет используют... я имею виду браузерами пользуются...
Если Да, то решение в приципе простое:
ты из проги запускаешь браузер с параметрами... (предварительно в браузере, сохранив условия входа на сайт)
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
Спасибо! Ну я тут уже кое что намудрил, единственное что интересует теперь, это следующее. Ну допустим на сайте Два поля ввода текста. Как к ним получить доступ зная их имя? Ну вот например,
WebBrowser1.OleObject.Document.all('ctl00$LoginViewCtrl$Login1$UserName').value:='Имя'; - это я пытался заполнить поле для ввода имени. Но не работает. А как правильно надо?
CJ F.A.N., берёте какой нибудь снифер (браузерный или обычный... не важно). Снифаете данные при нажатии на какой нибудь элемент формы (форма авторизации например). Далее в программе воспроизводите этот запрос с помощью Winsock, WinInet, TNMHTTP, TIdHTTP.
CJ F.A.N., посмотрите здесь (http://www.cryer.co.uk/brian/delphi/twebbrowser/read_write_form_elements.htm) и более общее здесь (http://www.cryer.co.uk/brian/delphi/twebbrowser/twebbrowser_oleobject.htm)
CJ F.A.N.
01-09-2010, 08:36
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;
Очень полезные ссылки, а то сколько не искал примеров, там ничего подходящего не оказалось! Проблема решена!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.