Как можно взаимодействовать с сайтом через консольное приложение?

1,00
р.
Допустим, имеется сайт на котором есть какое-то поле.
В это поле нужно послать какое-то значение, нажать на кнопку, затем получить новую страницу, где перейти по первой ссылке.
За этими мне нужно обращаться к классу WebBrowser?
Если можно, то покажите пример(например, можно взять целевой сайт google, но без использования его API.)

Ответ
Гуглим в консоле
Покажу на примере программы, которая позволяет гуглить прям в консоле (извлекает первые заглавные ссылки поиска на google.com):
Предварительные работы
Используйте CefSharp — библиотеку-оболочку, основанную на Chromium. Очень подробно её описал в этом ответе. Устанавливается просто через Nuget пакет.
Install-Package CefSharp.OffScreen -Version 57.0.0
Скопировав из приведенного мною ответа два класса (CefSharpWrapper и ConvertHelper), у вас уже готов скелет программы, с помощью которой вы можете исполнять любой JavaScript прямо из консольного приложения.

Также установите x64 или x86 в качестве платформы. Платформа Any CPU поддерживается, но требует дополнительного кода.
Дополнительные свойства и методы
Также для данной задачи добавьте в CefSharpWrapper свойство Address:
public string Address => _browser.Address
и метод WaitTillAddressChanges:
public void WaitTillAddressChanges() { // wait till address changes AutoResetEvent waitHandle = new AutoResetEvent(false)
EventHandler onAddressChanged = null
onAddressChanged = (sender, e) => { _browser.AddressChanged -= onAddressChanged
waitHandle.Set() }
_browser.AddressChanged += onAddressChanged
waitHandle.WaitOne() }
Пример самой программы
Вот пример самой программы (класс Program, метод Main):
public class Program { private static void Main() { MainAsync().Wait() }
private static async Task MainAsync() { CefSharpWrapper wrapper = new CefSharpWrapper()
wrapper.InitializeBrowser()
Console.Write("Введите поисковой запрос: ")
string searchText = Console.ReadLine()
string[] urls = await wrapper.GetResultAfterPageLoad("https://google.com", async () => { await wrapper.EvaluateJavascript( // заполняем тесковое поле $@"document.getElementById('lst-ib').value = '{searchText}' // выполняем submit поисковой формы document.getElementById('tsf').submit()")
// Ждём когда перейдёт на результаты поиска wrapper.WaitTillAddressChanges()
// Когда страница результатов поиска полностью подгрузится, излекаем результаты return await wrapper.GetResultAfterPageLoad(wrapper.Address, async () => await wrapper.EvaluateJavascript( // получаем результаты "Array.prototype.map.call(document.querySelectorAll('h3.r > a'), (a) => a.href) ")) })
Console.WriteLine("Первые ссылки поиска:")
foreach (string url in urls) { Console.WriteLine(url) }
wrapper.ShutdownBrowser() } }

Результаты программы
К примеру, если я введу "parse html C#":


AJAX
Также довольно удобно работать с AJAX c помощью с этой библиотеки.