Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.08.2009, 20:10   #1
euroflock
 
Регистрация: 31.08.2009
Сообщений: 3
По умолчанию Элемент формы <input type="image"... не находится в коллекции элементов формы?

Возможно у меня в каких-то настройках что-то не так или руки не оттуда, но скорее всего с головой ..

Есть форма, браузер и кнопка. Нажимаем на кнопку и получаем:
Код:
Form1.WebBrowser1.Navigate('http://www.freeboard.com.ua/advanced_search.php/search_in_description/1');
Когда загрузка страницы в браузер завершится (Form1.WebBrowser1.ReadyState=READY STATE_COMPLETE;), то пытаемся получить из загруженной страницы количество находящихся там форм и перечень имеющихся в них элементов:
Код:
var
  f, e, formsCount, elementsCount: integer;
  tagName, temp, elementType: string;
const 
  CrLf: string = chr(10) + chr(13);
begin
  formsCount:=Form1.WebBrowser1.OleObject.document.forms.length;
  temp := 'Found ' + inttostr(formsCount) + ' forms' + CrLf;
  for f := 0 to formsCount - 1 do begin
    elementsCount := Form1.WebBrowser1.OleObject.document.forms.item(f,'').elements.length;
    //здесь в сообщении выводится количество элементов на форме и реальное содержимое формы, в котором явно видны ВСЕ элементы
    //однако их количество в коллекции не соответствует реальному: элемент INPUT с типом IMAGE в списке отсутствует
    showmessage(inttostr(elementsCount) + CrLf + form.innerHtml);
    temp := temp + inttostr(f+1) + ' form: Name=[' + Form1.WebBrowser1.OleObject.document.forms.item(f,'').name + ']' + CrLf;
      for e := 0 to elementsCount - 1 do begin
        tagName := Form1.WebBrowser1.OleObject.document.forms.item(f,'').item(e,'').tagName;
        temp := temp + 'TagName=[' + tagName + ']';
        if tagName='INPUT' then begin
          elementType := Form1.WebBrowser1.OleObject.document.forms.item(f,'').item(e,'').type;
          temp := temp + ', Type=[' + elementType + ']';
        end;
        temp := temp + CrLf;
      end;
    temp := temp + CrLf + CrLf;
  end;
  if temp='' then temp:='absent any forms';
  showmessage(temp);
end;
Собственно вопрос в следующем: как получить искомый элемент в виде элемента формы (IHTMLElement или IHTMLInputElement)?

Во время выполнения на странице правильно определяются две формы. Первая форма выдаёт ТРИ элемента и следующий .innerHtml:
Код:
<INPUT type=hidden value=1 name=search_in_description 1>
<TABLE cellSpacing=0 cellPadding=0 align=right border=0>
<TBODY>
<TR>
<TD><INPUT style="WIDTH: 130px" maxLength=30 size=10 name=keywords>
<INPUT type=hidden value=361b4a9e035e0af252c92043a630c13f name=osCsid></TD>
<TD noWrap width=4></TD>
<TD><INPUT title=" Быстрый поиск " style="MARGIN-TOP: 1px" type=image alt="Быстрый поиск"
src="includes/languages/russian/images/buttons/button_search.gif" border=0>
</TD></TR></TBODY></TABLE>
В нём явно видны ЧЕТЫРЕ тэга INPUT. Почему в коллекции элементов этой формы их всего три? Отсутствует последний.
Вторая форма также в конце имеет элемент INPUT с типом IMAGE вместо SUBMIT, поэтому аналогично неправильно работает. Что не так?
Может ли этот глюк быть из-за отсутствия в искомом тэге аттрибута NAME (у всех есть, а у него нету)? Однако у кнопки SUBMIT также редко встречается аттрибут NAME...
euroflock вне форума Ответить с цитированием
Старый 01.09.2009, 16:17   #2
euroflock
 
Регистрация: 31.08.2009
Сообщений: 3
По умолчанию

Как и полагается, отвечаю сам:

1. Если брать в рассмотрение элемент FORM с его коллекцией всех элементов FORM.ALL, то искомый тэг <input type="image"> там присутствует и таким образом, перебирая все элементы один за другим (парсинг) формируем реальный список всех интересующих элементов.

2. В иной коллекции на базе этой же формы, а именно в коллекции FORM.ELEMENTS.ALL находятся (должны находиться) все элементы, отвечающие за интерфейс (только поля ввода, списки, кнопки и т.п.) с пользователем. Однако именно в эту коллекцию (по неведомым мне причинам) не помещается только искомый тэг (в данном случае, но возможно там есть и другие баги).

3. Остаётся полагать, что с головой, руками и настройками у меня пока всё нормально, а сложившаяся ситуация - это очередной недокументированный баг или глюк МелкоМягких, из-за немалого количества которых я в своё время принял решение перейти с VB (VB.NET) на DELPHI. Хорошо, что есть возможность его обойти (см.п.1)!
euroflock вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с проверкой <input type="file"> Ang3r PHP 4 07.08.2009 20:13
HTML нет событий при передачи методо POST через <input type="image" Mixail HTML и CSS 12 07.06.2009 03:33
Проблема с отображением формы и компонентов в режиме "RightToLeft" (RTL) NeonSimfi Win Api 0 04.05.2009 12:31
"Выползание" формы при наведении мыши к краю экрана Neeter Общие вопросы Delphi 3 18.04.2009 22:10
Как вырезать на форме область определенной формы ("что то вроде ножниц") dimfil Общие вопросы Delphi 9 10.11.2007 08:51