Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.11.03;
Скачать: CL | DM;

Вниз

Не могу получить свойство Name элемента вебстраницы   Найти похожие ветки 

 
TSas   (2013-02-02 19:05) [0]

СВойство ID получаю легко, таким образом:
Var
 html_elements: OleVariant;

..............
for i := 0 to html_elements.length - 1 do
S := html_elements.Item(i).Id;
Но если написать
S := html_elements.Item(i).Name; то возникает ошибка "Свойство Name
не поддерживается сервером автоматизации".
Как с этим бороться? Пробовал тупо парсить, получая outerHTML, Name получал, но вот по Name обращаться к элементам форм всё равно не получается.


 
Dimka Maslov ©   (2013-02-02 19:46) [1]

Значит нет такого свойства в том варианте парсера, который используется.


 
TSas   (2013-02-02 20:48) [2]

Да папрсил-то я с горя. ID-то, я написал, как получал. НАверно, зависит от браузера.


 
знайка   (2013-02-02 23:55) [3]

При чем тут браузер?


 
TSas   (2013-02-03 19:07) [4]

Если не браузер, то что? Получем одно свойство Id получить можно, а полностью аналогичное ему свойство Name получить нельзя.
Более того, при обращении к элементам по Id всё работает, а по Name - косяк?
Name, как уже писал, с горя парсил из outerHTML элемента страницы. Получал, конечно, верное значение, но при обращении через Name - косяк.
Ради эксперимента пробовал писать страницку, и на JavaScript, скрипты которой содержались в этой страничке, обращаться к элементам странички можно было и по id и по Name. Почему так?


 
levko.ne@gmail.com   (2013-02-03 20:33) [5]

Попробуйте вместо получения свойства Name вызвать метод getAttribute("name")


 
знайка   (2013-02-03 23:37) [6]


> Если не браузер, то что?
То, что объектная модель страницы не имеет такого свойства (Name) для элемента.

> на JavaScript, скрипты которой содержались в этой страничке,
>  обращаться к элементам странички можно было и по id и по
> Name. Почему так?
ерунда какая-то. :)


 
TSas   (2013-02-04 12:57) [7]

>  обращаться к элементам странички можно было и по id и по
> Name. Почему так?
ерунда какая-то. :)
Могу страницу вывесить, если не верите.
Вообще-то, когда-то давно, я читал, что Name - это уставревшее обозначение, надо писать Id, а ещё лучше писать оба атрибута. Так в книжке советовали. Вот на браузер и грушу, он довольно новый, точно новее той книжки.


 
знайка   (2013-02-04 13:00) [8]

Да просто код скрипта показать и разметку страницы с элементами, не надо тут странички...


 
TSas   (2013-02-04 13:07) [9]

S := html_elements.Item(i).getAttribute("Name"); //Could not convert variant type "nil" into type "string"


 
Cobalt ©   (2013-02-04 15:42) [10]

TSas
Скажи-ка, мил человек, ты что за код используешь?
Какие интерфейсы?

Выложи ка этот интерфейс, и мы с тобой вместе поищем там этот "Name"


 
TSas   (2013-02-05 20:06) [11]

Var
 X: TElementData;
 html_elements: OleVariant;
 i: Integer;
 S, S1, S2: String;
begin
 ElementList.Clear;
 ElementList.URL := URL;
 html_elements := BrowserForm.WebBrowser1.OleObject.Document.all;
 for i := 0 to html_elements.length - 1 do
   Begin
   X.Element := peUnknowen; //Чтобы херня не пролезла
   S := html_elements.Item(i).TagName;

   If StringsAreEqual(S, BUTTON) then
     Begin
     X.Element := peButton;
     S1 := html_elements.Item(i).Type;
     if StringsAreEqual(S1, SUBMIT) then
       Begin
       S2 := html_elements.Item(i).innerText;
       ElementList.SubmitList.AddObject(S2, TObject(peButton));
       End;
     End;

   If StringsAreEqual(S, INPUT) then
     Begin
     X.Element := peButton;
     S1 := html_elements.Item(i).Type;
     If StringsAreEqual(S1, "Image") then
       Begin
       S1 := html_elements.Item(i).Value;
       If IsEmptyStr(S1) then continue;
       X.Element := peSubmit;
       ElementList.SubmitList.AddObject(S1, TOBject(peSubmit));
       End;
     End;

   S := html_elements.Item(i).Id;
   If S = EmptyStr then continue;
   If ElementList.AlreadyHasId(S) then continue;
   X.Id := S;
   S := html_elements.Item(i).TagName;
   X.TagName := S;

   If StringsAreEqual(S, INPUT) then //Это input
     Begin // - Да, input
     S1 := html_elements.Item(i).Type;
     If StringsAreEqual(S1, "Text") then X.Element := peText
     else if StringsAreEqual(S1, "") then X.Element := peText
     else if StringsAreEqual(S1,HIDDEN_INPUT) then X.Element := peHidded
     else if StringsAreEqual(S1, PASSWORD_INPUT) then X.Element := pePassword
     else if StringsAreEqual(S1, "File") then X.Element := peFile
     else if StringsAreEqual(S1, SUBMIT) then
       Begin
       X.Element := peSubmit;
       ElementList.SubmitList.AddObject(html_elements.Item(i).Value, TOBject(peSubmit));
       End
     else If StringsAreEqual(S1, "CheckBox") then X.Element := peCheckBox;
     If S1 <> EmptyStr then X.TagName := S + " type " + S1;
     End; //Если input

   If StringsAreEqual(S, "TextArea") then X.Element := peTextArea;
   If StringsAreEqual(S, "Select") then X.Element := peSelect;
   //Теперь варианты дивов
   If StringsAreEqual(S, "Div") then X.Element := peDiv;
   If StringsAreEqual(S, "P") then X.Element := peDiv;
   If StringsAreEqual(S, "H1") then X.Element := peDiv;
   If StringsAreEqual(S, "H2") then X.Element := peDiv;
   If StringsAreEqual(S, "H3") then X.Element := peDiv;
   If StringsAreEqual(S, "H4") then X.Element := peDiv;
   If StringsAreEqual(S, "A") then X.Element := peHref;

   If X.Element <> peUnknowen then //Нормальный элемент?
     ElementList.Add(X); //Добавил
   End; //of for
end;

Это готовит описание, чтобы потом можно было формы заполнять. Name здесь нет, т. к. у элементов странички они есть, притом от id отличаются, а вызывают косяки.
Вот, уже писал, как пробовал
S := html_elements.Item(i).getAttribute("Name"); //Could not convert variant type "nil" into type "string"

Добавлял проверку на nil и присвоение вначале варианту, а не строке, но лучше от этого не становилось.



Страницы: 1 вся ветка

Текущий архив: 2013.11.03;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.007 c
15-1368966000
Interrupted++
2013-05-19 16:20
2013.11.03
Проблемы с внешним хардом.


4-1268135204
somio
2010-03-09 14:46
2013.11.03
Как узнать права текущего пользователя Windows


2-1360138340
Lonsdale
2013-02-06 12:12
2013.11.03
multi edit records


15-1368891373
Разведка
2013-05-18 19:36
2013.11.03
Помогите устроится программистом


2-1360085593
Novice
2013-02-05 21:33
2013.11.03
Выделение строки ListView другим цветом