|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Автоматизирование действий, TWebBrowser
Добрый день.
На веб странице есть: Код HTML:
В 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; Прошу помочь. |
#2
|
|||
|
|||
Код:
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
|
|||
|
|||
Спасибо за ответ.
К сожалению ТWebBrowser ту страницу отображает некорректно, пришлось использовать ТEdgeBrowser. У ТEdgeBrowser отсутствует OleObject. Надо все это реализовать на ТEdgeBrowser. |
#4
|
|||
|
|||
Код:
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
|
|||
|
|||
EdgeBrowser1NavigationCompleted не выполняется
Такое ощущение, что после клика на btn_find событие EdgeBrowser1NavigationCompleted не выполняется.
|
#6
|
|||
|
|||
Если клик по кнопке запускает загрузку страницы
Цитата:
Сам ивент вообще срабатывает? Если в него добавить например Код:
memo1.lines.add('OnNavigationCompleted'); |
#7
|
|||
|
|||
Мой код
При первой загрузке, или когда я вручную обновляю страницу, то ивент срабатывает.
Может быть не всю страницу загружается при нажатии на 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; |