Skip to Content

Webbrowser + frame + radiobutton (на Delphi)

6 всего / 0 новых
Последнее
Demergo
Молчун
Сообщения: 4
Бонусы: 0
Пол: Мужской
Группы: Программисты
Блог: читать!
Webbrowser + frame + radiobutton (на Delphi)

В Webbrowser1 загружаетс страница. На ней есть frame (под номером Innocent. На этом фрейме находтс radiobutton. Я хочу нажать/отметить любой из них.

Нашел такой код:

procedure TForm1.Button1Click(Sender: TObject);
var
ovElements: OleVariant;
i: Integer;
begin
ovElements := WebBrowser1.OleObject.Document.Forms.Item( 0 ).Elements;
for i := 0 to ( ovElements.Length-1 ) do
if ( AnsiUpperCase( ovElements.Item( i ).tagName ) = 'INPUT' ) then
if ( AnsiUpperCase( ovElements.Item( i ).type ) = 'RADIO' ) then
if ( ovElements.item( i ).Value = 'Some text' ) then
ovElements.Item( i ).Click;
end;

Но с фреймами он не работает.
Подскажите, пожалуйста, что в нем изменить чтобы поиск происходил в нужном фрейме или посоветуйте другой код.

Сандер
Администратор
Сандер аватар
ГуруМодератор
Сообщения: 1944
Бонусы: 617
Пол: Мужской
Блог: читать!

Нужно сначала зайти в этот frame.
В цикле можете обойти
WebBrowser1.OleObject.Document.Frames

А уже у фрейма использовать метод Forms

Demergo
Молчун
Сообщения: 4
Бонусы: 0
Пол: Мужской
Группы: Программисты
Блог: читать!
Исходное сообщение от 08/26/2011 - 17:19

Я извиняюсь за свои "знания" Делфи, но подскажите как мне "зайти в этот фрейм".

я попробовал написать:

ovElements := WebBrowser1.OleObject.Document.frames.item( 0 ).document.Forms.Item( 0 ).Elements;

Но при выполнении кода оно не находит radiobuton вообще, хотя он точно есть в этом фрейме так как если скопировать ХТМЛ кода фрейма то там есть теги радиобуттона.

Сандер
Администратор
Сандер аватар
ГуруМодератор
Сообщения: 1944
Бонусы: 617
Пол: Мужской
Блог: читать!

Я точный синтаксис сейчас не скажу, на и попробовать негде.
второе document, мне кажется, лишнее.
Но, вообще, стоит поставить отладку и вычислить, что получается в процессе выполнения кода...

akkadites
Возмутитель спокойствия
Сообщения: 161
Бонусы: 94
Пол: Мужской
Группы: Блоггеры
Блог: читать!

Сообщение от Demergo:
я попробовал написать:

ovElements := WebBrowser1.OleObject.Document.frames.item( 0 ).document.Forms.Item( 0 ).Elements;


по-моему не хватает. item второй раз не вызвана. document.forms.item(Innocent.elements.item(Innocent - первый элемент в первой форме.
вообще может быть защита такогго типа, что доступ к документу во фрейме запрещён. у меня такое с iframe и обойти никак не могу. попытайтесь ещё через contentDocument вместо document.

Demergo
Молчун
Сообщения: 4
Бонусы: 0
Пол: Мужской
Группы: Программисты
Блог: читать!

Сообщение от Сандер:
Я точный синтаксис сейчас не скажу, на и попробовать негде.
второе document, мне кажется, лишнее.
Но, вообще, стоит поставить отладку и вычислить, что получается в процессе выполнения кода...

к сожалению выдает ошибку

Сообщение от akkadites:
по-моему не хватает. item второй раз не вызвана. document.forms.item(.elements.item( - первый элемент в первой форме.
вообще может быть защита такогго типа, что доступ к документу во фрейме запрещён. у меня такое с iframe и обойти никак не могу. попытайтесь ещё через contentDocument вместо document.

начал выдавать ошибку во время перебора (дальше по алгоритму программы). По моему там нельзя контретизировать конкретный элемент, ведь мы производим поиск нужного элемента и заранее не знаем под каким он номером

ЗЫ: Если есть у кого-то 15-20 минут свободного времени, то буду очень благодарен если поможете. Я дам исходные коды + адрес страницы которую я мучаю на предмет выделения радиобатона. Уверен что истина где-то рядом, просто я весьма начинающий «программист».

ЗЫЗЫ: Буду благодарен за любые наводящие советы.

RSS-материал


Активные пользователи

ПользовательБонусы
Сандер617
Nefertity247
Tori242
robot201
Chief183
STAER140
faiters139
Mavarik121
akkadites94
staiki94