C# Как продолжить выполнение JavaScript кода после перехода или обновления с помощью CefSharp

Мне нужно программно выполнить 3 действия на веб-странице

  1. заполнить на сайте текстовое поле
  2. нажать на кнопку поиска (после этого происходит запрос и страница возвращает мне результаты поиска)
  3. нажать на первую ссылку

Если я помещу действия 1 и 2 к примеру в кнопку 1:

private void Button1_Click(object sender, EventArgs e)
{
string jsScript1 = "document.getElementById('story').value=" + '\'' + textFind.Text + '\'' + ";" 
+ "document.querySelector('body > div.wrapper > div.header > div.header44 > div.search_panel > span > form > button').click();";
var task1 = chrome.EvaluateScriptAsync(jsScript1);
task1.Wait();
}

И действие 3 в кнопку 2:

private void Button2_Click(object sender, EventArgs e)
{
   string jsScript3 = "document.getElementsByTagName('a')[1].click();";
   var task3 = chrome.EvaluateScriptAsync(jsScript3);
   task3.Wait();
}

Все работает идеально. Но я хочу выполнять все эти действия внутри одной кнопки.

Я нашел следующее решение:

private async void ButtonFind_Click(object sender, EventArgs e)
{
//Action 1 & 2
string jsScript1 = "document.getElementById('story').value=" + '\'' + textFind.Text + '\'' + ";" 
+ "document.querySelector('body > div.wrapper > div.header > div.header44 > div.search_panel > span > form > button').click();";
await chrome.EvaluateScriptAsync(jsScript1);

//Action3
Thread.Sleep(1000); 
string jsScript3 = "document.getElementsByTagName('a')[2].click();";
await chrome.EvaluateScriptAsync(jsScript3);
}

Мне приходится использовать Thread.Sleep(1000); потому что в JavaScript после перехода на другую страницу или нажатия на кнопку поиска уничтожает все скрипты, запущенные в данный момент в браузере. Также я считаю что использовать Thread.Sleep или Task.Delay - это не хорошая идея. Как еще я могу изменить свой код, не используя Thread.Sleep или Task.Delay?


Ответы (0 шт):