![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Добрый день.
На веб странице есть: Код 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
|
|||
|
|||
|
Такое ощущение, что после клика на 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; |