Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Расширенный поиск элементов на веб-странице с использованием тегов и атрибутов в Delphi

Delphi , Интернет и Сети , Браузер

При работе с веб-страницами в среде Delphi часто возникает необходимость не только находить элементы по их тегам, но и проверять их атрибуты. В данной статье мы рассмотрим, как можно расширить функционал поиска элементов, чтобы он учитывал не только теги, но и конкретные атрибуты элементов.

Проблема

Рассмотрим код, который ищет элемент по его тегу, но не может найти элемент, учитывая атрибуты. В коде есть функция FindElement, которая должна возвращать элемент, соответствующий заданному тегу и набору атрибутов.

function FindElement(const Tag: String; const Attributes: TStringList): IHTMLElement;
begin
  // ...
  for i := 0 to Pred(Collection.length) do
  begin
    E := Collection.item(i, EmptyParam) as IHTMLElement;
    Count := 0; // Обнуляем счетчик совпадений атрибутов для каждого элемента
    for j := 0 to Attributes.Count-1 do
    begin
      // ...
      if Count = Attributes.Count then
        Exit(E);
      // Если хотя бы один из атрибутов элемента не найден, пропускаем следующий элемент.
      break;
    end;
  end;
end;

Решение

В коде, представленном выше, была допущена ошибка в логике проверки атрибутов. Важно обнулять счетчик совпадений атрибутов для каждого элемента и проверять все атрибуты, даже если один из них не совпадает. Кроме того, стоит обратить внимание на оптимизацию вызова метода getAttribute для каждого атрибута, что может быть неэффективно.

function FindElement(const Tag: String; const Attributes: TStringList): IHTMLElement;
var
  FAttributeName, FAttributeValue: String;
  AttributeValue: String;
  Collection: IHTMLElementCollection;
  E: IHTMLElement;
  i, j: Integer;
begin
  Collection := (EmbeddedWB1.Document as IHTMLDocument3).getElementsByTagName(Tag);
  for i := 0 to Pred(Collection.length) do
  begin
    E := Collection.item(i, EmptyParam) as IHTMLElement;
    var MatchCount: Integer;
    MatchCount := 0;
    for j := 0 to Attributes.Count-1 do
    begin
      FAttributeName := LowerCase(List(Attributes, j, 0, ','));
      FAttributeValue := LowerCase(List(Attributes, j, 1, ','));
      AttributeValue := E.getAttribute(FAttributeName, 0);
      if not VarIsNull(AttributeValue) then
      begin
        if AttributeValue = FAttributeValue then
          Inc(MatchCount, 1);
      end
      else
      begin
        // Если атрибут не найден, пропускаем проверку остальных атрибутов для данного элемента.
        Break;
      end;
    end;
    if MatchCount = Attributes.Count then
      Exit(E);
  end;
end;

Альтернативный подход

Некоторые атрибуты, такие как class, имеют свои собственные свойства, и getAttribute может не возвращать их. В таком случае, для атрибута class следует использовать свойство className элемента:

if FAttributeName = 'class' then
begin
  if E.className = FAttributeValue then
    Inc(MatchCount, 1);
end
else
begin
  AttributeValue := E.getAttribute(FAttributeName, 0);
  if not VarIsNull(AttributeValue) then
  begin
    if AttributeValue = FAttributeValue then
      Inc(MatchCount, 1);
  end;
end;

Заключение

В данной статье мы рассмотрели, как улучшить функционал поиска элементов на веб-странице, используя не только теги, но и атрибуты элементов. Важно помнить об обнулении счетчика совпадений для каждого элемента и о возможности использования специальных свойств для некоторых атрибутов. Приведенные примеры кода на Object Pascal (Delphi) помогут вам в реализации подобного функционала в ваших проектах.

Создано по материалам из источника по ссылке.

Статья рассматривает улучшение функционала поиска элементов на веб-странице в среде Delphi, учитывая не только теги, но и атрибуты элементов, с примерами кода на Object Pascal и рекомендациями по оптимизации процесса.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Браузер ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-20 22:40:01/0.0020990371704102/0