Мне нужно программно выполнить 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?
F12и открываем вкладкуСеть, обновляем страницу и видим все запросы, что отправил браузер и куда. Нажимаем на любой и жмем тамCtrl+F, пишем интересующее нас слово, например1 серия, браузер из всех запросов выдаст те, где встречается это слово, жмем 2 раза по найденному, и он выделит строку с этими данными. По виду это JSON, скопируем все после=и до;, вставим это в любой обозреватель JSON, ну и увидим там это, вот вам и все серии. – EvgeniyZ Apr 23 '22 at 16:11HttpClient, далее из нее вытянуть любым удобным способом этот JSON, распарсить его и все, у вас на руках список серий, от кого он и прямые ссылки на просмотр. Еще вариант, там вон есть кнопка "Скачать", жмем на нее также с открытой вкладкой "Сеть", увидим там простой GET запрос на адресhttps://kinogo.la/engine/ajax/cdn_download.php?news_id=33972, который отдает простенькую HTML страничку со всеми ссылками, всеми сериями и прочей информацией. Также,HttpClient, отправляем запрос, парсим, профит. Нужен ли для этого браузер?) – EvgeniyZ Apr 23 '22 at 16:15