0

Мне нужно программно выполнить 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?

  • А вы на 100% уверены, что вам нужен целый браузер для парсинга сайта? Просто обычно, люди думают, что это единственный верный вариант, не разбираясь как устроен сайт. – EvgeniyZ Apr 23 '22 at 13:04
  • EvgeniyZ, а что Вы предлагаете сделать? – Csharp_cowboy Apr 23 '22 at 13:29
  • А все зависит от сайта, того как он работает и что именно на нем вам надо сделать. Без этого, что либо конкретно советовать не могу. Проанализируйте сайт самостоятельно, определите что и куда он отсылает, ведь почти все сайты это клиенты для некого сервиса, куда они шлют POST/GET запросы. – EvgeniyZ Apr 23 '22 at 13:37
  • EvgeniyZ, покажите пожалуйста пример как парсить без браузера? – Csharp_cowboy Apr 23 '22 at 14:32
  • Сайт является тайной? Если нет, давайте ссылку и что надо получить. – EvgeniyZ Apr 23 '22 at 14:35
  • EvgeniyZ, с этого сайта https://kinogo.la, я хочу получить список всех серии сериала Игра в кальмара, потом если мне понадобится получить информацию о другом сериале чтобы можно было изменить поиск – Csharp_cowboy Apr 23 '22 at 15:39
  • Ок, заходим на нужную страницу, где надо достать данные, далее жмем F12 и открываем вкладку Сеть, обновляем страницу и видим все запросы, что отправил браузер и куда. Нажимаем на любой и жмем там Ctrl+F, пишем интересующее нас слово, например 1 серия, браузер из всех запросов выдаст те, где встречается это слово, жмем 2 раза по найденному, и он выделит строку с этими данными. По виду это JSON, скопируем все после = и до ;, вставим это в любой обозреватель JSON, ну и увидим там это, вот вам и все серии. – EvgeniyZ Apr 23 '22 at 16:11
  • То есть, вам надо взять HTML страницы при помощи простого HttpClient, далее из нее вытянуть любым удобным способом этот JSON, распарсить его и все, у вас на руках список серий, от кого он и прямые ссылки на просмотр. Еще вариант, там вон есть кнопка "Скачать", жмем на нее также с открытой вкладкой "Сеть", увидим там простой GET запрос на адрес https://kinogo.la/engine/ajax/cdn_download.php?news_id=33972, который отдает простенькую HTML страничку со всеми ссылками, всеми сериями и прочей информацией. Также, HttpClient, отправляем запрос, парсим, профит. Нужен ли для этого браузер?) – EvgeniyZ Apr 23 '22 at 16:15
  • Как материал для изучения, можете почитать мои старые ответы: 1 и 2. – EvgeniyZ Apr 23 '22 at 16:17
  • Спасибо! Попробую по вашему методу, если возникнут вопросы потом еще напишу вам) – Csharp_cowboy Apr 23 '22 at 16:30
  • Вы умеете писать java скрипты для cefSharp? – Csharp_cowboy May 12 '22 at 08:54
  • И опять 25... Зачем вас целый браузер и скрипты на другом языке? Вы тогда уж сначала говорите что конкретно делаете, а уж затем будем думать, как лучше поступить, ибо вон выше я даже пример вам дал, где нужен чисто C# да и все. Если так "в лоб" отвечать, то нет, я этой ерундой не занимался и как то не очень хочу. – EvgeniyZ May 12 '22 at 12:09

0 Answers0