Форум: "Начинающим";
Текущий архив: 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