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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.11.2011, 09:15
Аватар для arxlex
arxlex arxlex вне форума
Прохожий
 
Регистрация: 04.11.2011
Адрес: localhost
Сообщения: 14
Версия Delphi: D7
Репутация: 10
Печаль Вывод содержания из HTML

Содержание HTML:
Код:
...
<dl class="tb-prop tb-clearfix">
<dt>Цвет товара</dt>
<dd>
<ul data-property="Цвет" class="tb-clearfix J_TSaleProp tb-img  ">
<li data-value="1627207:28332" title="Чёрный" class="tb-txt"><a href="#" ><span>Чёрный</span></a></li>
<li data-value="1627207:3232483" title="Вишнёвый" class="tb-txt"><a href="#" ><span>Вишнёвый</span></a></li>
<li data-value="1627207:3232484" title="Белый" class="tb-txt"><a href="#" ><span>Белый</span></a></li>
<li data-value="1627207:90554" title="Жёлтый" class="tb-txt"><a href="#" ><span>Жёлтый</span></a></li></ul>
</dd>
</dl>
...
<dl class="tb-prop tb-clearfix">
<dt>Размер товара</dt>
<dd>
<ul data-property="Размер" class="tb-clearfix J_TSaleProp  ">
<li data-value="1630696:6536025"><a href="#"><span>XL</span></a></li>
<li data-value="1630696:3266779"><a href="#"><span>XXL</span></a></li>
<li data-value="1630696:3266781"><a href="#"><span>XXXL</span></a></li>
</ul>
</dd>
</dl>
...
Вопрос: как по отдельности получить содержание в ComboBox по свойству data-property?

Например:
ComboBox1(Цвета) и ComboBox2(Размер)

Как можно определить содержание <ul> по свойствам data-property="Цвет" и data-property="Размер", так как наверху и внизу кода в HTML есть множество <ul> с разными data-property="..."...
Ответить с цитированием
  #2  
Старый 04.11.2011, 09:28
Аватар для arxlex
arxlex arxlex вне форума
Прохожий
 
Регистрация: 04.11.2011
Адрес: localhost
Сообщения: 14
Версия Delphi: D7
Репутация: 10
По умолчанию

Пробовал вот так:

Код:
var
i,n1: integer;
o1,ot1: OleVariant;
begin
  ComboBox1.Clear;
  o1:=WebBrowser1.OleObject.Document.getElementsByTagName('ul').item(0);
  ot1:=o1.getElementsByTagName('li');
  n1:=ot1.Length;
  if n1>0 then
  begin
    for i:=0 to n1-1 do
    begin
      self.ComboBox1.Items.Add(ot1.item(i).InnerText);
      ComboBox1.ItemIndex := 0;
    end;
  end;
end;

Но тут никак не получается получить содержание <ul> с помощью свойства data-property="Цвет"
Ответить с цитированием
  #3  
Старый 04.11.2011, 10:59
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

ну так проверяй значение атрибута data-property
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #4  
Старый 04.11.2011, 20:15
Аватар для arxlex
arxlex arxlex вне форума
Прохожий
 
Регистрация: 04.11.2011
Адрес: localhost
Сообщения: 14
Версия Delphi: D7
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
ну так проверяй значение атрибута data-property
как остроумно... если бы я знал как это делается, я не стал бы создавать эту тему. Не смог бы пояснить, как это делать. Или показать это на примере... Плииз

П,С, я новичок в d+html

Последний раз редактировалось arxlex, 04.11.2011 в 20:38.
Ответить с цитированием
  #5  
Старый 06.11.2011, 08:36
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
uses
  MSHTML,

type
  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
    Memo1: TMemo;
    Memo2: TMemo;
    procedure FormCreate(Sender: TObject);

procedure TForm1.FormCreate(Sender: TObject);
var
  document: OleVariant;
  HTMLDocument: IHTMLDocument3;
  HTMLElementCollection: IHTMLElementCollection;
  i: Integer;
  HTMLElement: IHTMLElement;
  HTMLElementCollection2: IHTMLElementCollection;
  j: Integer;
begin
  Memo1.Lines.LoadFromFile('Project1.htm');
  WebBrowser1.Navigate('about:blank');
  while WebBrowser1.ReadyState<READYSTATE_INTERACTIVE do
    Application.ProcessMessages;
  document:=WebBrowser1.Document;
  document.clear;
  document.open;
  document.write(Memo1.Text);
  document.close;
  HTMLDocument:=WebBrowser1.Document as IHTMLDocument3;
  HTMLElementCollection:=HTMLDocument.getElementsByTagName('ul');
  for i:=0 to HTMLElementCollection.length-1 do
  begin
    HTMLElement:=HTMLElementCollection.item(i, 0) as IHTMLElement;
    Memo2.Lines.Add('--'+HTMLElement.getAttribute('data-property', 0)+'--');
    HTMLElementCollection2:=HTMLElement.children as IHTMLElementCollection;
    for j:=0 to HTMLElementCollection2.length-1 do
      Memo2.Lines.Add((HTMLElementCollection2.item(j, 0) as IHTMLElement).innerText);
  end;
end;

http://data.cod.ru/130989
http://msdn.microsoft.com/en-us/libr...(v=VS.85).aspx
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #6  
Старый 06.11.2011, 09:48
Аватар для arxlex
arxlex arxlex вне форума
Прохожий
 
Регистрация: 04.11.2011
Адрес: localhost
Сообщения: 14
Версия Delphi: D7
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
Код:
uses
  MSHTML,

type
  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
    Memo1: TMemo;
    Memo2: TMemo;
    procedure FormCreate(Sender: TObject);

procedure TForm1.FormCreate(Sender: TObject);
var
  document: OleVariant;
  HTMLDocument: IHTMLDocument3;
  HTMLElementCollection: IHTMLElementCollection;
  i: Integer;
  HTMLElement: IHTMLElement;
  HTMLElementCollection2: IHTMLElementCollection;
  j: Integer;
begin
  Memo1.Lines.LoadFromFile('Project1.htm');
  WebBrowser1.Navigate('about:blank');
  while WebBrowser1.ReadyState<READYSTATE_INTERACTIVE do
    Application.ProcessMessages;
  document:=WebBrowser1.Document;
  document.clear;
  document.open;
  document.write(Memo1.Text);
  document.close;
  HTMLDocument:=WebBrowser1.Document as IHTMLDocument3;
  HTMLElementCollection:=HTMLDocument.getElementsByTagName('ul');
  for i:=0 to HTMLElementCollection.length-1 do
  begin
    HTMLElement:=HTMLElementCollection.item(i, 0) as IHTMLElement;
    Memo2.Lines.Add('--'+HTMLElement.getAttribute('data-property', 0)+'--');
    HTMLElementCollection2:=HTMLElement.children as IHTMLElementCollection;
    for j:=0 to HTMLElementCollection2.length-1 do
      Memo2.Lines.Add((HTMLElementCollection2.item(j, 0) as IHTMLElement).innerText);
  end;
end;

http://data.cod.ru/130989
http://msdn.microsoft.com/en-us/libr...(v=VS.85).aspx
Спасибо тебе огоромное! Ты мне очень помог! Очень полезный сайт=))))
Ответить с цитированием
  #7  
Старый 06.11.2011, 13:37
Аватар для arxlex
arxlex arxlex вне форума
Прохожий
 
Регистрация: 04.11.2011
Адрес: localhost
Сообщения: 14
Версия Delphi: D7
Репутация: 10
По умолчанию

еще, один вопросик. как вытащить значение из аттрибута data-property? например как сделать так чтобы каждые значения атрибутов в коде html нашли свое место в отдельный combobox-ах? например цвет(combobox1), размер(combobox2) и тд.

Последний раз редактировалось arxlex, 06.11.2011 в 13:42.
Ответить с цитированием
  #8  
Старый 06.11.2011, 14:23
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
type
  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
    Memo1: TMemo;
    Memo2: TMemo;
    ComboBox1: TComboBox;
    ComboBox2: TComboBox;
    procedure FormCreate(Sender: TObject);

procedure TForm1.FormCreate(Sender: TObject);
var
  document: OleVariant;
  HTMLDocument: IHTMLDocument3;
  HTMLElementCollection: IHTMLElementCollection;
  i: Integer;
  HTMLElement: IHTMLElement;
  HTMLElementCollection2: IHTMLElementCollection;
  j: Integer;
  AComboBox: TComboBox;
begin
  Memo1.Lines.LoadFromFile('Project1.htm');
  WebBrowser1.Navigate('about:blank');
  while WebBrowser1.ReadyState<READYSTATE_INTERACTIVE do
    Application.ProcessMessages;
  document:=WebBrowser1.Document;
  document.clear;
  document.open;
  document.write(Memo1.Text);
  document.close;
  HTMLDocument:=WebBrowser1.Document as IHTMLDocument3;
  HTMLElementCollection:=HTMLDocument.getElementsByTagName('ul');
  for i:=0 to HTMLElementCollection.length-1 do
  begin
    HTMLElement:=HTMLElementCollection.item(i, 0) as IHTMLElement;
    Memo2.Lines.Add('--'+HTMLElement.getAttribute('data-property', 0)+'--');
    if HTMLElement.getAttribute('data-property', 0)='Цвет' then AComboBox:=ComboBox1
    else if HTMLElement.getAttribute('data-property', 0)='Размер' then AComboBox:=ComboBox2
    else AComboBox:=nil;
    HTMLElementCollection2:=HTMLElement.children as IHTMLElementCollection;
    for j:=0 to HTMLElementCollection2.length-1 do
    begin
      if AComboBox<>nil then AComboBox.Items.Add((HTMLElementCollection2.item(j, 0) as IHTMLElement).innerText);
      Memo2.Lines.Add((HTMLElementCollection2.item(j, 0) as IHTMLElement).innerText);
    end;
  end;
end;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #9  
Старый 07.11.2011, 06:48
Аватар для arxlex
arxlex arxlex вне форума
Прохожий
 
Регистрация: 04.11.2011
Адрес: localhost
Сообщения: 14
Версия Delphi: D7
Репутация: 10
По умолчанию

В ходе процесса я заметил что значения 'data-property' меняется, но не меняется сам класс:
Код:
<ul data-property="Цвет" class="tb-clearfix J_TSaleProp tb-img  ">
Я уже вам надоел наверное, но из ваших примеров я многое узнал. Небольшая просьба, можно пример как получить и проверить значение аттрибута class.

Я попробывал сделать так, но не получилось...
Код:
if HTMLElement.getAttribute('class', 0)='tb-clearfix J_TSaleProp tb-img  ' then AComboBox:=ComboBox1
__________________
|Mess With The Best Die Like The Rest|
Ответить с цитированием
  #10  
Старый 07.11.2011, 12:54
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

есть более понятная обёртка над этим ole - Watin, но она .net, и документацию там читать/смотреть всеравно придётся
Ответить с цитированием
  #11  
Старый 07.11.2011, 15:12
Аватар для arxlex
arxlex arxlex вне форума
Прохожий
 
Регистрация: 04.11.2011
Адрес: localhost
Сообщения: 14
Версия Delphi: D7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Pyro
есть более понятная обёртка над этим ole - Watin, но она .net, и документацию там читать/смотреть всеравно придётся
а без .net нет никаких вариантов? например getElementByClassName?
__________________
|Mess With The Best Die Like The Rest|
Ответить с цитированием
  #12  
Старый 08.11.2011, 09:42
Аватар для arxlex
arxlex arxlex вне форума
Прохожий
 
Регистрация: 04.11.2011
Адрес: localhost
Сообщения: 14
Версия Delphi: D7
Репутация: 10
По умолчанию

Цитата:
Сообщение от arxlex
а без .net нет никаких вариантов? например getElementByClassName?

Все я разобрался сам Нужно было просто поменять "class" на "className". NumLock спасибо за ссылки

Цитата:
...HTMLElement.getAttribute('className', 0)='tb-clearfix J_TSaleProp tb-img '...
__________________
|Mess With The Best Die Like The Rest|
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter