Модераторы: Snowy, Poseidon, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Берем данные с интернет-страницы. как это сделать?.. 
:(
    Опции темы
Vladimir_K
Дата 17.12.2007, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.12.2006

Репутация: нет
Всего: 1



Привет всем!
Придумал я себе новую головную боль!
Задача такая: подключиться к инету, взять данные со страницы и вывести в окно программы.
Indy я скачал, просмотрел, скажу прямо - темный лес... Давненько я делфи не занимался - многое уже подзабылось.
Использую такой код:
Код

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdHttp, StdCtrls, ComCtrls;
.
.
.
procedure TForm1.Button1Click(Sender: TObject);
var http: TIdHttp;
    s: string;
begin
  RichEdit1.Clear;
  http:=TIdHTTP.Create(nil);
  try
    s:=http.Get('http://xerurg.ru/forex.php');
  except
    ShowMessage('Неудача.');
  end;

  RichEdit1.Lines.Add(s);
  http.Free;
end;

Бывает, что страница скачивается, но как-то не полностью - на странице в инете какие-то слова есть, а у меня в окне проги их нет...
Правильный ли я код использую? Есть ли особенности при подобном скачивании текста с html, или php страницы?
Ой, вопросов много... помогите, кто чем может!
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
MetalFan
Дата 17.12.2007, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



Цитата(Vladimir_K @  17.12.2007,  17:02 Найти цитируемый пост)
но как-то не полностью - на странице в инете какие-то слова есть, а у меня в окне проги их нет

сынок, это - фантастика


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Vladimir_K
Дата 17.12.2007, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.12.2006

Репутация: нет
Всего: 1



Ну да! Нет и все! Серьезно!
Начало страницы есть, конец - тоже, в середине куча текста... Но не весь!
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
MetalFan
Дата 17.12.2007, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



значит там скрипт или фрейм или еще какая-то хитрость


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Vladimir_K
Дата 17.12.2007, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.12.2006

Репутация: нет
Всего: 1



А может есть способ просто найти на странице нужную инфу (цифры, слова) без загрузки кода страницы в эту переменную "s"?

Просматриваю HTML-код страницы в браузере - все нормально. При пересылке в мою прогу что-то теряется...

Это сообщение отредактировал(а) Vladimir_K - 17.12.2007, 21:35
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
MetalFan
Дата 17.12.2007, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



Цитата(Vladimir_K @  17.12.2007,  20:58 Найти цитируемый пост)
что-то теряется


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


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Vladimir_K
Дата 17.12.2007, 23:23 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.12.2006

Репутация: нет
Всего: 1



Извините, я никому не хотел надоедать... так получилось  smile 
Я понял причину.
Я пытаюсь зайти на одну из страниц сайта, на которую доступ есть только по паролю.
В браузере IE вхожу на эту страницу без проблем - используется автовход (наверное мой логин и пароль сохранены в куках на моем компе), а из проги войти туда не могу - предлагается ввести пароль...
То есть ничего не "теряется" - дурья моя башка, а просто не передается то, чего нет.
Вот так. Есть ли выход из данной ситуации?
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
MetalFan
Дата 17.12.2007, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



Цитата(Vladimir_K @  17.12.2007,  23:23 Найти цитируемый пост)
Есть ли выход из данной ситуации?

есть. сначало залогиниться


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Vladimir_K
Дата 18.12.2007, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.12.2006

Репутация: нет
Всего: 1



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

Это сообщение отредактировал(а) Vladimir_K - 18.12.2007, 00:14
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
elementos
Дата 18.12.2007, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 10.12.2007

Репутация: нет
Всего: нет



вставлю свои пять копеек  smile 
логично, что нужно залогинится в программе. исследовать сначала html страницу с формой, куда передается логин и пасс, найти там название этих полей, затем передать логин и пасс через idhttp компоненту, а после уже обрабатывать сам полученный html. 
пример:

Код

procedure TForm1.Button1Click(Sender: TObject);
var Data: TIdMultiPartFormDataStream;
begin
Data:=TIdMultiPartFormDataStream.Create;
try
Data.AddFormField('form_sent','1');
Data.AddFormField('redirect_url','index.php'); //  куда редиректит после входа
Data.AddFormField('username','VasyaPupkin'); // поле ввода логина
Data.AddFormField('password','12345678');   // поле ввода пароля
WB_LoadHTML(Web, HTTP.Post('http://forum.мах.ru/login.php?action=in',Data));
finally
Data.Free;
end;
end;



Web - TWebbrowser
Http - TIdhttp

процедура выглядит так:
 
Код

procedure WB_LoadHTML(WebBrowser: TWebBrowser; HTMLCode: string);
var
sl: TStringList;
ms: TMemoryStream;
begin
WebBrowser.Navigate('about:blank');
while WebBrowser.ReadyState < READYSTATE_INTERACTIVE do
Application.ProcessMessages;
if Assigned(WebBrowser.Document) then begin
sl := TStringList.Create;
try
ms := TMemoryStream.Create;
try
sl.Text := HTMLCode;
sl.SaveToStream(ms);
ms.Seek(0, 0);
(WebBrowser.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms));
finally
ms.Free;
end;
finally
sl.Free;
end;
end;
end;


не забудьте кукиманагер на форму положить, и привязать его к idhttp

Это сообщение отредактировал(а) elementos - 18.12.2007, 17:14
PM MAIL   Вверх
Gess
Дата 18.12.2007, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 17.12.2007
Где: Москва

Репутация: нет
Всего: нет



Хотелось бы решить следующую "проблему"


При работе со страницей

WebBrowser1.Navigate('https://www.np-ats.ru/reports.jsp?part=1')

возникает следующее сообщение
user posted image

такое же "безобразие" и при попытке получить файл с сайта

перерыл инет, ни настройки браузера, ни отключение всего в "Центре безопасности" проблему не решают.

Как избавиться от этих назойливых сообщений?

PM MAIL   Вверх
MetalFan
Дата 18.12.2007, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



Gess, создай отдельную тему


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Vladimir_K
Дата 18.12.2007, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.12.2006

Репутация: нет
Всего: 1



Расположил на форме IdHTTP и IdCookieManager. 
IdHTTP привязал к IdCookieManager.
Вот то, что у меня в uses:

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdHttp, StdCtrls, ComCtrls, ActiveX, MsHtml, IdBaseComponent,
  IdCookieManager, IdComponent, IdTCPConnection, IdTCPClient;

Нужно ли еще что-нибудь указывать?
Моя программулина:
Код

unit PExp_U;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdHttp, StdCtrls, ComCtrls, ActiveX, MsHtml, IdBaseComponent,
  IdCookieManager, IdComponent, IdTCPConnection, IdTCPClient;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    RichEdit1: TRichEdit;
    IdCookieManager1: TIdCookieManager;
    IdHTTP1: TIdHTTP;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure WB_LoadHTML(WebBrowser: TWebBrowser; HTMLCode: string);
var
sl: TStringList;
ms: TMemoryStream;
begin
WebBrowser.Navigate('about:blank');
while WebBrowser.ReadyState < READYSTATE_INTERACTIVE do
Application.ProcessMessages;
if Assigned(WebBrowser.Document) then begin
sl := TStringList.Create;
try
ms := TMemoryStream.Create;
try
sl.Text := HTMLCode;
sl.SaveToStream(ms);
ms.Seek(0, 0);
(WebBrowser.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms));
finally
ms.Free;
end;
finally
sl.Free;
end;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var HTTP: TIdHttp;
    Web: TWebbrowser;
    Data: TIdMultiPartFormDataStream;
begin
 Data:=TIdMultiPartFormDataStream.Create;
 try
  Data.AddFormField('form_sent','1');
  Data.AddFormField('redirect_url','index.php'); //  êóäà ðåäèðåêòèò ïîñëå âõîäà
  Data.AddFormField('username','VasyaPupkin'); // ïîëå ââîäà ëîãèíà
  Data.AddFormField('password','12345678');   // ïîëå ââîäà ïàðîëÿ
  WB_LoadHTML(Web, HTTP.Post('http://forum.ìàõ.ru/login.php?action=in',Data));
 finally
  Data.Free;
end;
end;
end.

Выдает ошибки:
[Error] PExp_U.pas(31): Undeclared identifier: 'TWebBrowser'
[Error] PExp_U.pas(36): Missing operator or semicolon
[Error] PExp_U.pas(37): 'DO' expected but identifier 'ReadyState' found
[Error] PExp_U.pas(39): ')' expected but identifier 'Document' found
[Error] PExp_U.pas(47): ')' expected but identifier 'Document' found
[Error] PExp_U.pas(47): Operator not applicable to this operand type
[Error] PExp_U.pas(50): EXCEPT or FINALLY expected
[Error] PExp_U.pas(51): 'END' expected but 'FINALLY' found
[Error] PExp_U.pas(54): '.' expected but ';' found
[Warning] PExp_U.pas(55): Text after final 'END.' - ignored by compiler
[Error] PExp_U.pas(17): Unsatisfied forward or external declaration: 'TForm1.Button1Click'
[Fatal Error] PExp.dpr(5): Could not compile used unit PExp_U.pas'

Это сообщение отредактировал(а) Vladimir_K - 18.12.2007, 21:39
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
aktuba
Дата 18.12.2007, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 9
Всего: 38



А зачем тебе тут WebBrowser???
Код

procedure TForm1.Button1Click(Sender: TObject);
var lData: TStringList;
begin
  lData := TStringList.Create;
  try
    lData.Add('login=user');
    lData.Add('pass=vasya');
    IdHTTP.Post('http://url/login.php', lData);
    ShowMessage(IdHTTP.Get('http://url'));
  finally
    lData.Free;
  end;
end;


Это сообщение отредактировал(а) aktuba - 18.12.2007, 21:49


--------------------
user posted image
PM MAIL WWW Skype   Вверх
Vladimir_K
Дата 18.12.2007, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.12.2006

Репутация: нет
Всего: 1



Цитата(aktuba @ 18.12.2007,  20:48)
А зачем тебе тут WebBrowser???

Интересный вопрос. Так посоветовали...

Сейчас буду пробовать твой код.

Это сообщение отредактировал(а) Vladimir_K - 18.12.2007, 22:32
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0918 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.