|
Вопрос # 5 525/ вопрос открыт / |
|
Здравствуйте!
Пишу программу,которая будет взаимодействовать с веб страницей. Компонент webbrowser загружает страницу, и нужно сэмулировать нажатие кнопки таб. но тут возникает проблема, такое ощущение что страница после каждого вызова загружатся заново и результата никакого. пробовал поставить edit, с ним работает эмуляция. У кого нибудь есть какие нибудь преположения. Еще вот что, окно будет неактывным и вообще скрытым.
Благодарю за помощь.
Приложение: Переключить в обычный режим- procedure EmulateKey(Wnd: HWND; VKey: Integer);
- asm
- push 0
- push edx
- push 0101H //WM_KEYUP
- push eax
- push 0
- push edx
- push 0100H //WM_KEYDOWN
- push eax
- call PostMessage
- call PostMessage
- end;
-
-
- EmulateKey(WebBrowser1.Handle, VK_TAB);
 |
Вопрос задал: KilkaMS (статус: Посетитель)
Вопрос отправлен: 25 июля 2011, 18:33
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 15; последнее сообщение — 26 июля 2011, 17:53; участников в обсуждении: 3.
|
Вадим К (статус: Академик), 25 июля 2011, 19:05 [#1]:
а зачем то код на ассемблере? так ведь понятнее и красивее.
procedure EmulateKey(Wnd: HWND; VKey: Integer);
begin
PostMessage(wnd, WM_KEYDOWN, VKey,0);
PostMessage(wnd, WM_KEYUP, VKey,0);
end;
Кнопка таб нажимается для чего? не для флеша на странице? или просто для перехода между полями? есть много способов, как это сделать проще.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
KilkaMS (статус: Посетитель), 25 июля 2011, 20:02 [#2]:
через PostMessage не получалось, для перехода между полями, поделитесь этими способами
|
|
Вадим К (статус: Академик), 25 июля 2011, 22:05 [#3]:
а попробуйте использовать sendmessage. Параметры такие же. Но только исключительно sendmessage.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
KilkaMS (статус: Посетитель), 26 июля 2011, 08:08 [#4]:
может я не туда посылаю?
SendMessage(WebBrowser1.handle, WM_KEYDOWN, VK_TAB,0);
SendMessage(WebBrowser1.handle, WM_KEYUP, VK_TAB,0);
проблема такаяже, как будто обновляется страница, и если нажимаю несколько раз на таб остается на том месте, куда после первого нажатия попала
|
|
min@y™ (статус: Доктор наук), 26 июля 2011, 08:14 [#5]:
А зачем всё это делать в скрытом окне?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
KilkaMS (статус: Посетитель), 26 июля 2011, 08:38 [#6]:
потому что программа будет работать в скрытом режиме, окно не будет отображено
|
|
min@y™ (статус: Доктор наук), 26 июля 2011, 08:56 [#7]:
Цитата (KilkaMS):
потому что
Ответ на вопрос "зачем" нужно начинать со слов "для того, чтобы...". Это важно.
Цитата (KilkaMS):
программа будет работать в скрытом режиме, окно не будет отображено
Зачем TWebBrowser в скрытом окне?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
KilkaMS (статус: Посетитель), 26 июля 2011, 09:05 [#8]:
а какие еще варианты есть? мне нужно совершить некие манипуляции на веб странице, поставить несколько галочек, нажать на кнопочку.
|
|
min@y™ (статус: Доктор наук), 26 июля 2011, 09:12 [#9]:
Цитата (KilkaMS):
мне нужно совершить некие манипуляции на веб странице, поставить несколько галочек, нажать на кнопочку.
Надо просто составить нужный POST-запрос и отправить серверу. Нахрена городить TWebBrowser на скрытом окне-то? Да ещё эмулировать нажатие клавиш... Есть же модуль winsock.pas, есть компоненты Indy, есть компоненты ICS и т.п.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
KilkaMS (статус: Посетитель), 26 июля 2011, 09:59 [#10]:
а можно пример использования?
|
|
min@y™ (статус: Доктор наук), 26 июля 2011, 10:20 [#11]:
Цитата (KilkaMS):
а можно пример использования?
У меня нету. Поспрашай тут у народа. А лучше - погугли.
Для начала найди, скачай и поставь сниффер.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
KilkaMS (статус: Посетитель), 26 июля 2011, 16:54 [#12]:
немного погугля наткнулся на
WebBrowser1.OleObject.Document.Example_box.checked
такой пример.
часть моего нтмл кода
</H3></TD>
<TD valign="top" class="ms-formbody" width="400px">
<!-- FieldName="SMS"
FieldInternalName="SMS"
FieldType="SPFieldBoolean"
-->
<span dir="none">
<input id="ctl00_m_g_bcb7e20a_5c6b_4d9b_b614_de038e953e74_ctl00_ctl04_ctl01_ctl00_ctl00_ctl04_ctl00_ctl00_BooleanField" type="checkbox" name="ctl00$m$g_bcb7e20a_5c6b_4d9b_b614_de038e953e74$ctl00$ctl04$ctl01$ctl00$ctl00$ctl04$ctl00$ctl00$BooleanField" /><br>
</span>
как я понял имя SMS нужно поставить. но чтото не очень получилось выполнить эту процедуру ктонибудь пользовался подбным методом уже?
|
|
KilkaMS (статус: Посетитель), 26 июля 2011, 17:00 [#13]:
сделал так
ovElements := WebBrowser1.OleObject.Document.Forms.Item( 0 ).Elements;
for i := 0 to ( ovElements.Length-1 ) do
if ( AnsiUpperCase( ovElements.Item( i ).type ) = 'CHECKBOX' ) then
ovElements.Item( i ).checked:=true;
|
|
KilkaMS (статус: Посетитель), 26 июля 2011, 17:29 [#14]:
вопрос такой появился,а как к элементу по id обратиться?
|
|
KilkaMS (статус: Посетитель), 26 июля 2011, 17:53 [#15]:
по аналогии пытаюсь в комбобох изменить значение таким кодом
if ( AnsiUpperCase( ovElements.Item( i ).tagName ) = 'SELECT' ) then
ovElements.Item( i ).Value:='Ok';
приложение падает с ошибокой
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|