Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.11.2013, 21:37
Dima170792 Dima170792 вне форума
Новичок
 
Регистрация: 02.04.2011
Сообщения: 61
Репутация: 10
По умолчанию Label и строка на сайте

Здравствуйте уважаемые форумчане, подскажите как сделать чтобы при обновлении строчки на некоем веб сайте, в предложении Label автоматически принимал значение нижеуказаной строки,
Код HTML:
<span> <a href="/game/profile"> <img height="16" width="16" title="Здоровье" src="http://cdn03.w.meni.mobi/images/icons/icon_header_health.gif?20131118120353" alt="."> <span id="ajx_health">128450</span> </a> </span>
Код:
procedure TForm1.sSpeedButton1Click(Sender: TObject);
 var
 s: String;
  i: Integer;
begin
    s := (WebBrowser1.Document as IHTMLDocument2).Body.innerHTML;
  i := Pos('<span id="ajx_health">', s);
  sLabel1.Caption := Copy(s, i, Pos('</span>', s) - i);
 end;
Что неправильно в коде - вместо того чтобы принять значение 128450 стоящее между тегами
Код HTML:
<span id="ajx_health">[b]128450[/b]</span>
, Label просто обнуляет значение caption помогите пожалуйста разобраться
, заранее благодарен.

Последний раз редактировалось M.A.D.M.A.N., 23.11.2013 в 21:59.
Ответить с цитированием
  #2  
Старый 23.11.2013, 22:03
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,029
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Для начала, Pos возвращает индекс, по которому находится НАЧАЛО строки. Далее, третий параметр в Copy это не позиция, до которой копировать, а ДЛИННА, т.е. кол-во символов, которые надо скопировать.

Соответсвенно, данный кусок должен выглядеть примерно так:
Код:
i := Pos('<span id="ajx_health">', s) + Length('<span id="ajx_health">') + 1; 
sLabel1.Caption := Copy(s, i, Length(s) - Pos('</span>', s) - i);
Проверь с длинной, мог что-то напутать.
Ну и еще, если у тебя где-то еще в страничке есть </span>, то надо воспользоваться функцией PosEx, что бы найти позицию правильного </span>
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
Dima170792 (24.11.2013)
  #3  
Старый 24.11.2013, 19:49
Dima170792 Dima170792 вне форума
Новичок
 
Регистрация: 02.04.2011
Сообщения: 61
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Для начала, Pos возвращает индекс, по которому находится НАЧАЛО строки. Далее, третий параметр в Copy это не позиция, до которой копировать, а ДЛИННА, т.е. кол-во символов, которые надо скопировать.

Соответсвенно, данный кусок должен выглядеть примерно так:
Код:
i := Pos('<span id="ajx_health">', s) + Length('<span id="ajx_health">') + 1; 
sLabel1.Caption := Copy(s, i, Length(s) - Pos('</span>', s) - i);
Проверь с длинной, мог что-то напутать.
Ну и еще, если у тебя где-то еще в страничке есть </span>, то надо воспользоваться функцией PosEx, что бы найти позицию правильного </span>
Спасибо, по крайней мере label принимает значение- правда в него он действительно вписывает все span id- но не ихние значения. Честно говоря впервые сталкиваюсь с функцией PosEx - а по описанию толком непонял ее возможностей, можте немного просветить?
Ответить с цитированием
  #4  
Старый 24.11.2013, 20:00
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Dima170792
Честно говоря впервые сталкиваюсь с функцией PosEx - а по описанию толком непонял ее возможностей, можте немного просветить?
PosEx то же что и Pos, только в третьем параметре можно ещё указывать с какого символа строки нужно начинать поиск подстроки.
Обычная Pos всегда ищет подстроку начиная с первого символа строки.
PosEx появилась в стандартной поставке начиная с Delphi 7 (в модуле StrUtils).
Ответить с цитированием
  #5  
Старый 03.12.2013, 10:05
nehaali nehaali вне форума
Прохожий
 
Регистрация: 03.12.2013
Сообщения: 1
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Спасибо, но можно поподробнее, допустим, мне нужно отправить переменные а и b на страницу php с адресом

И как вернуть обработанные данные обратно?
Ответить с цитированием
  #6  
Старый 03.12.2013, 12:33
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Можно ещё вот так
Код:
const tg ='<span id="ajx_health">';
procedure TForm1.sSpeedButton1Click(Sender: TObject);
 var
 s: String;
begin
 s := (WebBrowser1.Document as IHTMLDocument2).Body.innerHTML;
 Delete(s, 1, Pos(tg, s) + Length(tg) - 1);
 Delete(s, Pos('</span>', s), Length(s));
 sLabel1.Caption := s;
 end;
но это очень грубо

З.Ы.

Ну или всё же через посЭкс
Код:
procedure TForm1.sSpeedButton1Click(Sender: TObject);
 var
 s: String;
 i: integer;
begin
 s := (WebBrowser1.Document as IHTMLDocument2).Body.innerHTML;
 i := Pos('<span id="ajx_health">', s) + Length('<span id="ajx_health">');
  sLabel1.Caption := Copy(s, i, PosEx('</span>', s, i) - i);
 end;

Последний раз редактировалось Alegun, 03.12.2013 в 14:19.
Ответить с цитированием
  #7  
Старый 03.12.2013, 14:35
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Alegun
Можно ещё вот так
Код:
const tg ='<span id="ajx_health">';
procedure TForm1.sSpeedButton1Click(Sender: TObject);
 var
 s: String;
begin
 s := (WebBrowser1.Document as IHTMLDocument2).Body.innerHTML;
 Delete(s, 1, Pos(tg, s) + Length(tg) - 1);
 Delete(s, Pos('</span>', s), Length(s));
 sLabel1.Caption := s;
 end;
но это очень грубо
Это действительно грубовато.

Через PosEx делается примерно так:
Код:
const tg ='<span id="ajx_health">';
.....
var
.....
  p1, p2: Integer;
begin
.....
  p1 := Pos(tg, s);
  if p1>0 then
  begin
    Inc(p1, Length(tg));
    p2 := PosEx('</span>', s, p1);
    if p2 > 0 then sLabel1.Caption := Copy(s, p1, p2-p1);
  end;
end;

Но проще (и наверное лучше) воспользоваться умением TWebBrowser парсить страницу:
Код:
  sLabel1.Caption := (WebBrowser1.Document as IHTMLDocument3).getElementById('ajx_health').innerText;
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
Dima170792 (22.01.2014)
  #8  
Старый 22.01.2014, 00:56
Dima170792 Dima170792 вне форума
Новичок
 
Регистрация: 02.04.2011
Сообщения: 61
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
Это действительно грубовато.

Через PosEx делается примерно так:
Код:
const tg ='<span id="ajx_health">';
.....
var
.....
  p1, p2: Integer;
begin
.....
  p1 := Pos(tg, s);
  if p1>0 then
  begin
    Inc(p1, Length(tg));
    p2 := PosEx('</span>', s, p1);
    if p2 > 0 then sLabel1.Caption := Copy(s, p1, p2-p1);
  end;
end;

Но проще (и наверное лучше) воспользоваться умением TWebBrowser парсить страницу:
Код:
  sLabel1.Caption := (WebBrowser1.Document as IHTMLDocument3).getElementById('ajx_health').innerText;

Огромное спасибо! Действительно помогло!!!!!!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:09.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter