Как можно взаимодействовать с сайтом через консольное приложение?
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 помощью с этой библиотеки.