Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.10.2022, 15:38
fine fine вне форума
Прохожий
 
Регистрация: 22.10.2022
Сообщения: 4
Версия Delphi: CodeGear™ Delph
Репутация: 10
По умолчанию Автоматизирование действий, TWebBrowser

Добрый день.
На веб странице есть:
Код HTML:
<input type="input" id='input_value'.....> <button id='btn_find' ... > <input type="checkbox" name="chbox1" ...">

В memo1 загружены данные, которые надо по очереди вводить в поле input_value, нажать на btn_find, подождать несколько секунд и поставить галочку chbox1.
В идеале подождать до загрузки страницы, но страница загружается быстро, можно подождать скажем 3 сек. и перейти к следующему строку из memo1.
Код у меня такой:
Код:
for i := 0 to memo1.lines.Count - 1 do
begin
WebBrowser1.OleObject.Document.GetElementByID('input_value').value:=memo1.lines[i];
WebBrowser1.OleObject.Document.GetElementByID('btn_find').click();
//sleep(4000)
WebBrowser1.OleObject.Document.GetElementByID('chbox1').click();

end; 
Вместо sleep наверно надо использовать другой подход.
Прошу помочь.
Ответить с цитированием
  #2  
Старый 01.11.2022, 16:15
Shaft Shaft вне форума
Новичок
 
Регистрация: 15.05.2013
Сообщения: 74
Версия Delphi: 7/10.4
Репутация: 12
По умолчанию

Код:
WebBrowser1.OleObject.Document.GetElementByID('input_value').value:=memo1.lines[i];
WebBrowser1.OleObject.Document.GetElementByID('btn_find').click();
repeat
  Application.ProcessMessages;
until not WebBrowser1.Busy;
WebBrowser1.OleObject.Document.GetElementByID('chbox1').click();
Ответить с цитированием
  #3  
Старый 01.11.2022, 20:06
fine fine вне форума
Прохожий
 
Регистрация: 22.10.2022
Сообщения: 4
Версия Delphi: CodeGear™ Delph
Репутация: 10
По умолчанию

Спасибо за ответ.
К сожалению ТWebBrowser ту страницу отображает некорректно, пришлось использовать ТEdgeBrowser.
У ТEdgeBrowser отсутствует OleObject. Надо все это реализовать на ТEdgeBrowser.
Ответить с цитированием
  #4  
Старый 02.11.2022, 12:44
Shaft Shaft вне форума
Новичок
 
Регистрация: 15.05.2013
Сообщения: 74
Версия Delphi: 7/10.4
Репутация: 12
По умолчанию

Код:
var
  Waiting:Boolean;
//....

for i := 0 to memo1.lines.Count - 1 do
begin
  EdgeBrowser1.ExecuteScript('document.getElementById("input_value").value = "'+memo1.lines[i]+'";');
  EdgeBrowser1.ExecuteScript('document.getElementById("btn_find").click();');
  Waiting:=True;
  repeat
    Application.ProcessMessages;
  until not Waiting;
  EdgeBrowser1.ExecuteScript('document.getElementById("chbox1").click();');
end;

procedure TForm1.EdgeBrowser1NavigationCompleted(Sender: TCustomEdgeBrowser; IsSuccess: Boolean; WebErrorStatus: TOleEnum);
begin
  Waiting:=False;
end;

Последний раз редактировалось Shaft, 02.11.2022 в 13:12.
Ответить с цитированием
  #5  
Старый 02.11.2022, 20:00
fine fine вне форума
Прохожий
 
Регистрация: 22.10.2022
Сообщения: 4
Версия Delphi: CodeGear™ Delph
Репутация: 10
По умолчанию EdgeBrowser1NavigationCompleted не выполняется

Такое ощущение, что после клика на btn_find событие EdgeBrowser1NavigationCompleted не выполняется.
Ответить с цитированием
  #6  
Старый 02.11.2022, 22:40
Shaft Shaft вне форума
Новичок
 
Регистрация: 15.05.2013
Сообщения: 74
Версия Delphi: 7/10.4
Репутация: 12
По умолчанию

Если клик по кнопке запускает загрузку страницы
Цитата:
Сообщение от fine
В идеале подождать до загрузки страницы
То OnNavigationCompleted 100% должен выполнятся.
Сам ивент вообще срабатывает? Если в него добавить например
Код:
memo1.lines.add('OnNavigationCompleted');
Что нибудь происходит хотя бы при первой загрузке страницы?
Ответить с цитированием
  #7  
Старый 03.11.2022, 19:07
fine fine вне форума
Прохожий
 
Регистрация: 22.10.2022
Сообщения: 4
Версия Delphi: CodeGear™ Delph
Репутация: 10
По умолчанию Мой код

При первой загрузке, или когда я вручную обновляю страницу, то ивент срабатывает.
Может быть не всю страницу загружается при нажатии на btn_find.
Хотя страница iframe не содержит.

Задача усложняется: надо проверить существует ли чекбокс.
Алгоритм такой:
1. взял очередную строку из memo1
2. вводил в поле input_value
3. нажал на btn_find
4. подождал несколько секунд
5. проверил если не существует чекбокс, в memo2 добавляем ту строку.

код такой:

Код:
procedure TForm1.Button6Click(Sender: TObject);
begin
started:=1;
for i := 0 to memo1.lines.Count - 1 do    begin
	js:='document.getElementById("input_value").value="'+memo1.lines[i]+'";document.getElementById("btn_find").click();';
	EdgeBrowser1.ExecuteScript(js);
	Delay(2000);
	js:='t="";s=document.getElementsByName("chbox1")[0];if (s==null) {t="NotFound";} else {document.getElementsByName("chbox1")[0].click();t="Found";}';
	EdgeBrowser1.ExecuteScript(js);
	end;
started:=0;
end;

procedure TForm1.EdgeBrowser1ExecuteScript(Sender: TCustomEdgeBrowser;
  AResult: HRESULT; const AResultObjectAsJson: string);
begin
if (AResultObjectAsJson='NotFound') and ( started>0 ) then  
    memo2.Lines.add(memo1.Lines[i]+'-'+AResultObjectAsJson);
end;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:24.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter