С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi: Сети
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
NIKOLAYY
820 / 718 / 339
Регистрация: 22.09.2012
Сообщений: 4,995
1

Загрузка части страницы

12.03.2015, 19:11. Просмотров 1231. Ответов 24
Метки нет (Все метки)

Требуется снять значение с заголовка страницы-
HTML5
1
<title>Название страницы</title>
Качать всю страницу не имеет смысла, так как она очень большая и мне нужно будет снимать названия страниц в цикле.
Слышал вроде через синапс можно превать загрузку страницы на нужном месте, можно ли подобное через idHttp?
Как реализовать подобную затею, ваши идеи?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2015, 19:11
Ответы с готовыми решениями:

Вытащить картинку из части кода страницы webbrowser
Нужно из определенного участка страницы в webbrowser вытащить картинку и...

Загрузка страницы компонентом TIdHttp
Доброе время суток! Проблема заключается в следующем. Необходимо...

Загрузка HTML-страницы с выполнением скриптов
Помогите, пжлста, реализовать следующую задачу. Нужно загрузить страницы...

Загрузка html страницы в делфи
Люди, есть страничка созданная в блокноте index.html, как мне отобразить ее в...

как узнать, что загрузка страницы завершена в WebBrowser и на какую страницу перешел пользователь, или отправил редирект?
Всем привет! подскажите пожалуйста, как узнать, что загрузка страницы завершена...

24
krapotkin
3488 / 3081 / 1062
Регистрация: 14.04.2014
Сообщений: 14,880
Записей в блоге: 15
12.03.2015, 19:35 2
idHTTP.head()
0
NIKOLAYY
820 / 718 / 339
Регистрация: 22.09.2012
Сообщений: 4,995
12.03.2015, 20:30  [ТС] 3
krapotkin,
Неработает. Мне только название страницы нужно скачать.
Delphi
1
 Memo1.Text:= IdHTTP1.head('http://www.cyberforum.ru/'); //нерабочий код
0
krapotkin
3488 / 3081 / 1062
Регистрация: 14.04.2014
Сообщений: 14,880
Записей в блоге: 15
12.03.2015, 20:49 4
сорри
не проверил
тогда только вот так
Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TForm1.b1Click(Sender: TObject);
var
  Range: TIdEntityRange;
const
  URL='http://www.cyberforum.ru/';
begin
  Range := IdHTTP1.Request.Ranges.Add;
  Range.StartPos := 0;
  Range.EndPos := 1000;
  m1.Lines.text:=IdHTTP1.Get(URL);
end;
0
Sigin
221 / 221 / 111
Регистрация: 20.10.2013
Сообщений: 808
Завершенные тесты: 4
12.03.2015, 20:51 5
Посмотрите тут
0
NIKOLAYY
820 / 718 / 339
Регистрация: 22.09.2012
Сообщений: 4,995
12.03.2015, 20:59  [ТС] 6
krapotkin,
На 3 строке не компилируется. Млжет что в usus добавить?
0
БогДелфей
423 / 331 / 36
Регистрация: 31.05.2011
Сообщений: 1,156
12.03.2015, 21:00 7
Цитата Сообщение от NIKOLAYY Посмотреть сообщение
Memo1.Text:= IdHTTP1.head('http://www.cyberforum.ru/'); //нерабочий код
Код рабочий, только ты не правильно его используешь
Delphi
1
2
IdHTTP1.Head('http://www.cyberforum.ru/');
  Memo1.Lines := IdHTTP1.Response.RawHeaders;
Но это совсем не то, что тебе нужно.
0
krapotkin
3488 / 3081 / 1062
Регистрация: 14.04.2014
Сообщений: 14,880
Записей в блоге: 15
12.03.2015, 21:03 8
RawHeaders не дает <title>

uses IdHTTPHeaderInfo
0
NIKOLAYY
820 / 718 / 339
Регистрация: 22.09.2012
Сообщений: 4,995
12.03.2015, 21:16  [ТС] 9
БогДелфей,
Код отработал но он мне непоказал что находится тут <title>Название страницы</title>

Нуж-то сандартного способа нету получить заголовок страницы?
Грузить полстраницы и парсить что-ль или как?
0
mss
2634 / 2258 / 276
Регистрация: 24.12.2010
Сообщений: 13,725
12.03.2015, 21:21 10
Цитата Сообщение от NIKOLAYY Посмотреть сообщение
Нуж-то сандартного способа нету получить заголовок страницы?
Нет. И быть не может. По крайней мере в текущих версиях http
1
NIKOLAYY
820 / 718 / 339
Регистрация: 22.09.2012
Сообщений: 4,995
12.03.2015, 21:39  [ТС] 11
mss,
О как плохо-то, я думал сейчас в пару строк типа таких сделаю.

IdHTTP1.Title..........

А так прийдется изобретать велосипед...
Сайт (исходный код страницы) содержит 600 строк, нужная мне информация на 20 строке, 580 строк остальных мне вобще ненужны!
0
mss
2634 / 2258 / 276
Регистрация: 24.12.2010
Сообщений: 13,725
12.03.2015, 21:49 12
Цитата Сообщение от NIKOLAYY Посмотреть сообщение
нужная мне информация на 20 строке
Сегодня на 20-й, завтра на 1-й, послезавтра на столохматой..
При этом просматривая эту страницу в браузере никаких видимых изменений ты не увидишь.
0
krapotkin
3488 / 3081 / 1062
Регистрация: 14.04.2014
Сообщений: 14,880
Записей в блоге: 15
12.03.2015, 22:00 13
хм, интересно, что вопреки документации, ranges ни фига не срабатывают
качает все целиком
0
NIKOLAYY
820 / 718 / 339
Регистрация: 22.09.2012
Сообщений: 4,995
12.03.2015, 22:03  [ТС] 14
mss, Мне скорость важна.
Видел где- то в гугле код, загружаем 1 килобайт информации и закрываем IdHTTP соединение.
Так вот там такой код был, строк 15 не меньше, на события IdHTTP1Work, IdHTTP1WorkBegin и еще какие-то.
Затем разрыв соединия каким то образом делался.
Вобщем нужно делать так же.
0
krapotkin
3488 / 3081 / 1062
Регистрация: 14.04.2014
Сообщений: 14,880
Записей в блоге: 15
12.03.2015, 22:07 15
nestquik2 дал ссылку там именно так
0
mss
2634 / 2258 / 276
Регистрация: 24.12.2010
Сообщений: 13,725
12.03.2015, 22:14 16
Цитата Сообщение от krapotkin Посмотреть сообщение
ranges ни фига не срабатывают
качает все целиком
и не обязан
по двум причинам
1. не всякий сервер поддерживает докачку документов
2. к документам, получение которых может потребовать транссеансовую докачку, относятся только файловые ресурсы

Добавлено через 6 минут
Цитата Сообщение от NIKOLAYY Посмотреть сообщение
загружаем 1 килобайт информации и закрываем IdHTTP соединение
Ну загрузил ты этот килобайт, полез в него искать титл - и не нашел)
И что, по-новой запускать tcp/http-сессию ? текущую-то ты уже закрыл)
Запустил новую, прочитал теперь 2 кб, закрыл - и опять там не оказалось титла ..

Сказка про белого бычка получается)

Нужно читать заголовок Content-Length и на уровне tcp читать небольшими порциями контент-стрим документа, аккумулируя его и на лету анализируя на предмет обнаружения титла, пока размер стрима не превысит Content-Length.
Как только титл будет обнаружен, лавочку можно будет тут же закрыть.
0
NIKOLAYY
820 / 718 / 339
Регистрация: 22.09.2012
Сообщений: 4,995
12.03.2015, 22:55  [ТС] 17
nestquik2,
В делфи Delphi 2010 еще отработал кое как пример и то такое ощущение что неправильно, он грузил одно и тоже количество данных хотя я менял строку if AWorkCount > 1024 then. а в Delphi - 7 ошибка.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Lines.Clear;
  try
    Memo1.Lines.Text := IdHTTP1.Get('http://www.webdelphi.ru');
  except
    on E: EIdConnClosedGracefully do
      ShowMessage('Сработало исключение EIdConnClosedGracefully');
    on E: EIdException do
      ShowMessage('Сработало другое исключение Indy (EIdException)');
  end;
end;
 
procedure TForm1.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
var
  S: TStringStream;
begin
  if AWorkCount > 1024 then
  begin
    S := TStringStream.Create;  //ошибка здесь
    try
      S.LoadFromStream(TIdHTTP(ASender).Response.ContentStream); //получили текст
      Memo1.Lines.LoadFromStream(S); //вывели в Memo
    finally
      TIdHTTP(ASender).Socket.Close; //в любом случае закрыли соединение
      S.Free;
    end;
  end;
end;
 
end.
0
Миниатюры
Загрузка части страницы  
NIKOLAYY
820 / 718 / 339
Регистрация: 22.09.2012
Сообщений: 4,995
12.03.2015, 22:59  [ТС] 18
krapotkin,
И вот еще в чем проблема то, IdHTTP зависает (блокирует другие действия) пока незагрузит страницу полностью, то есть я имею ввиду загрузку большой страницы тогда что в поток поставить? Ну поставлю я в поток, а дальше сто делать?
У меня на деллфи- 7 тот ваш код не откомпилировался все равно, нужно искать какие- то еще решения.
0
krapotkin
3488 / 3081 / 1062
Регистрация: 14.04.2014
Сообщений: 14,880
Записей в блоге: 15
12.03.2015, 23:04 19
на основании вышеизложенного там будет просто s:=IdHTTP1.get(URL) и поиск в полученной строке
думаю, он ничем не отличается от новых версий
то, что надо в поток выносить - это обсасывалось тут тыщу раз
поток - чтобы программа не "замерзала"
можно 5 штук запустить, программа пока кнопочки порисует на экране
на выходе из потока в OnTerminate обрабатываем то, что пришло...
0
NIKOLAYY
820 / 718 / 339
Регистрация: 22.09.2012
Сообщений: 4,995
12.03.2015, 23:12  [ТС] 20
krapotkin, Пишу такой код:
Delphi
1
2
3
4
5
6
7
8
procedure TForm1.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
begin
   Caption:= IntToStr(AWorkCount);
 
      if AWorkCount > 500 then
     Exit;
end;
И вобщем да загрузка и прочий код останавливается, но останавлиется когда страница полностью загружена!
Даже в потоке этот же код прерывания загрузки не дал. Вобщем пока неотработал ни один код, я уже и незнаю что еще можно сделать?
0
12.03.2015, 23:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.03.2015, 23:12

Загрузка части другой страницы
Здравствуйте. Нужно на странице реализовать загрузку другой страницы не всей а...

загрузка определенной части html страницы?
Всем привет, есть таблица чемпионата по футболу на спортивном портале, вокруг...

Загрузка части страницы в зависимости от размера экрана
Есть блок кода который должен выводится при просмотре страницы на больших...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru