Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi: Сети
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
udachnik2
1 / 1 / 0
Регистрация: 08.04.2012
Сообщений: 28
1

Работа с DOM- моделью

07.11.2012, 14:50. Просмотров 2261. Ответов 8
Метки нет (Все метки)

День добрый! Есть форма:
<form accept-charset="UTF-8" action="/portfels/1837381051" class="ff" id="question_answer" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /><input name="_method" type="hidden" value="put" /><input name="authenticity_token" type="hidden" value="rcbpiBcjoUxciQ2Rxqw4a8bp89KEIL8o/oIQ8hP74yk=" /></div>
<input id="answer" name="answer" type="hidden" value="1" />
<input id="status" name="status" type="hidden" value="1" />
<br>
<div class='actions tac'>
<span class='sub'>
<button type='button'>Заполнено</button>
</span>
<span class='sub sub-disabled'><input data-disable-with="Ждите..." disabled="disabled" name="commit" type="submit" value="Далее" /></span>
</div>
</form>
Нужно программно нажать на кнопку "Заполнено", а потом далее. Наставьте на путь истинный пожалуйста!

Добавлено через 24 минуты
Друзья! Я прошу хотя бы пнуть в нужную сторону, конечно если нет другого выхода.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2012, 14:50
Ответы с готовыми решениями:

Работа с DOM HTML.
Есть поля ввода на сайте, нужно программно вставить значение в поле. Подскажите что я делаю не...

Информационная система с 3D моделью
Здравствуйте, форумчане! Вот какое дело... Я создаю информационную систему на Access, подключенную...

Есть ли нормальная литература по работе с DOM моделью?
Есть ли нормальная литература (желательно русскоязычная) и ресурсы по работе с DOM моделью?

Написать скрипт, рекурсивно обходящий дерево DOM страницы dom.html, начиная от корня DOM
Написать скрипт на языке JavaScript, рекурсивно обходящий дерево DOM страницы dom.html, начиная от...

Работа с моделью
Имеется такой вот кусок кода @parent_student = ParentStudent.find_by(parent_id:...

8
Alex_pac
1293 / 699 / 107
Регистрация: 25.05.2011
Сообщений: 2,158
Записей в блоге: 51
07.11.2012, 14:54 2
при условии что на сайте есть JQuery
Delphi
1
2
Webbrowser1.RunJS('$("form#question_answer button").eq(0).trigger("click")');
Webbrowser1.RunJS('$("form#question_answer").submit()');
http://jqbook.narod.ru/delphi/javascript.htm

лучше использовать TEmbededWB
0
udachnik2
1 / 1 / 0
Регистрация: 08.04.2012
Сообщений: 28
07.11.2012, 14:59  [ТС] 3
А если не подключен?
0
Alex_pac
1293 / 699 / 107
Регистрация: 25.05.2011
Сообщений: 2,158
Записей в блоге: 51
07.11.2012, 15:00 4
А если не подключен?
90% вероятность что подключен

открой исходний код и найди строку jquery если есть то значит ок
0
07.11.2012, 15:00
udachnik2
1 / 1 / 0
Регистрация: 08.04.2012
Сообщений: 28
07.11.2012, 15:07  [ТС] 5
К сожалению такой строки нет. Я уже весь инет перерыл. Коды всякие пробовал. Ввести в форму текст или поставить точку в радио кнопке получалось. А вот жмякнуть на кнопочку никак не выходит!
0
Alex_pac
1293 / 699 / 107
Регистрация: 25.05.2011
Сообщений: 2,158
Записей в блоге: 51
07.11.2012, 15:14 6
К сожалению такой строки нет
не беда. jsWebbrowser имеет режим подгрузки своего jquery как раз для таких неправильных сайтов

Delphi
1
2
3
4
5
6
7
8
9
procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
 
WebBrowser1.JqueryLoad; // Jquery подключен
 
// ваши действия
 
end;
0
udachnik2
1 / 1 / 0
Регистрация: 08.04.2012
Сообщений: 28
08.11.2012, 13:02  [ТС] 7
Друзья. я нашел как нажать на кнопку.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
procedure TForm1.Button1Click(Sender: TObject);
var
Doc: IHTMLDocument2;
  Buttons: IHTMLElementCollection;
  Button: IHTMLElement;
  i: Integer;
begin
  Doc := WebBrowser1.Document as IHTMLDocument2;
  Buttons := Doc.all.tags('BUTTON') as IHTMLElementCollection;
  for i := 0 to Buttons.length - 1 do
  begin
    Button := Buttons.item(i, EmptyParam) as IHTMLElement;
    if AnsiSameText(Trim(Button.innerText), 'Текст кнопки') then
    begin
      Button.click;
      Break;
    end;
  end;
end;
Но вот неурядица, там после того как я нажимаю кнопку проходит несколько сотен миллисекунд и становится активной другая кнопка:
HTML5
1
<span class='sub sub-disabled'><input data-disable-with="Ждите..." disabled="disabled" name="commit" type="submit" value="Далее" /></span>
Вот как мне с ней совладать? Я попробовал поэксперементировать, и вот что получилось:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
procedure TForm1.Button3Click(Sender: TObject);
var
Doc: IHTMLDocument2;
  Buttons: IHTMLElementCollection;
  Button: IHTMLElement;
  i: Integer;
begin
  Doc := WebBrowser1.Document as IHTMLDocument2;
  Buttons := Doc.all.tags('BUTTON') as IHTMLElementCollection;
  for i := 0 to Buttons.length - 1 do
  begin
    Button := Buttons.item(i, EmptyParam) as IHTMLElement;
    if Button.getAttribute('value', 2)= 'Г„Г*ëåå' then
    begin
      Button.click;
      Break;
    end;
  end;
end;
Но и это не работает!
0
Alex_pac
1293 / 699 / 107
Регистрация: 25.05.2011
Сообщений: 2,158
Записей в блоге: 51
08.11.2012, 13:15 8
Но вот неурядица, там после того как я нажимаю кнопку проходит несколько сотен миллисекунд и становится активной другая кнопка
"Ждите..."
а ты попробуй не ждать, а принудительно вызови
Delphi
1
Webbrowser1.RunJS('document.getElementById("question_answer").submit();');
0
udachnik2
1 / 1 / 0
Регистрация: 08.04.2012
Сообщений: 28
08.11.2012, 17:08  [ТС] 9
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var
  document: IHTMLDocument2;
  btns: IHTMLElementCollection;
  btn: IHTMLElement;
  i: Integer;
begin
  document:=WebBrowser.Document as IHTMLDocument2;
  btns:=document.all.tags('button') as IHTMLElementCollection;
  for i:=0 to btns.length-1 do
  begin
    btn:=btns.item(i, 0) as IHTMLElement;
    if btn.innerText='Заполнено' then btn.click;
  end;
  btns:=document.all.tags('input') as IHTMLElementCollection;
  for i:=0 to btns.length-1 do
  begin
    btn:=btns.item(i, 0) as IHTMLElement;
    if btn.getAttribute('value', 2)='Далее' then btn.click;
  end;
end;
готовое решение)))

Добавлено через 3 часа 19 минут
Ребята. Возникла новая проблема. Которую нужно решить без JQuery и всякой подобной ерунды)) Нужно нажать на радио кнопку. Пробовал:
Delphi
1
2
3
4
5
6
ovElements := WebBrowser1.OleObject.Document.forms.item(0).elements;
 for i := 0 to (ovElements.Length - 1) do
    if (ovElements.item(i).tagName = 'answer_12255') and
      (ovElements.item(i).type = 'radio') and
      (ovElements.item(i).Value = '1') then
      ovElements.item(i).Click;
Но что то не прокатывает. Кстати, вот код радиобатона:
HTML5
1
2
3
4
5
6
7
8
<td>
<label><input name="answer_12255" type="radio" value="1" />
Да
</label><label><input name="answer_12255" type="radio" value="0" />
Нет
</label><label><input name="answer_12255" type="radio" value="2" />
Не знаю
</label></td>
0
08.11.2012, 17:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2012, 17:08

Работа с моделью User
Должно быть 4 вида пользователя: Администратор, диспетчер, юр. лицо - используют стандартную...

Работа с моделью представления
имею модели: public class Album { public int Id { get; set; } public...

Работа с объектной моделью Excel
Здравствуйте. Нам дали задание на работу с объектной моделью Excel. На листе имеется область,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru