Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2013.11.03;
Скачать: [xml.tar.bz2];

Вниз

Не могу получить свойство 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.003 c
3-1293005098
Андрей Пл
2010-12-22 11:04
2013.11.03
Сравнение таблиц по срок.полям (лишние внутренние пробелы)


15-1368728640
Cynic
2013-05-16 22:24
2013.11.03
Разработчик интерфейсов


15-1369142209
p
2013-05-21 17:16
2013.11.03
Помогите перевести


11-1248443105
DevilDevil
2009-07-24 17:45
2013.11.03
Горизонтальный ScrollBar


2-1360355775
gl
2013-02-09 00:36
2013.11.03
Родительская папка





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский