Управление браузером с помощью C# для потоковой передачи мультимедиа - PullRequest
0 голосов
/ 22 февраля 2020

Я пытаюсь управлять браузером, используя C#. То, что раньше работало, было OLE / Interop. Это, кажется, отсутствует в современных браузерах. Все, что мне нужно сделать, это иметь возможность перейти к URL-адресу, а затем время от времени менять URL-адрес. Проблема с использованием Process.Start ("http://example.com") заключается в том, что это обычно порождает несколько дочерних процессов, и я не могу определить точный процесс, который нужно убить позже. Называя это несколько раз просто создает новых детей. Я попытался использовать элементы управления WebBrowser и WebView. Да, они дают мне нужный мне элемент управления, но механизм рендеринга встроен в приложение и является настолько старым, что ни один сайт не позволяет работать этим элементам управления.

Я нашел нечто, называемое WebDriver. Сначала это казалось хорошим решением, за исключением того, что оно, похоже, очень зависит от точной сборки браузера и зависит от Selenium. Вероятно, он отлично работает для автоматизированного тестирования, я не уверен, что он будет работать хорошо для долгосрочного контроля браузера, если браузер обновится сам.

Далее идет CefSharp. Я использовал это в прошлом, но он также имеет встроенный и устаревший движок рендеринга, и многие сайты жалуются, что он тоже устарел. И даже если CefSharp время от времени обновляется, мне нужно каждый раз перестраивать свое приложение. Проблема, которую я вижу здесь, заключается в том, что механизм рендеринга встроен в сборку, которая распространяется вместе с моим приложением. Да, я видел огромный список других встроенных решений. Многие из них не обновлялись годами.

В идеале я мог бы управлять браузером, используя что-то вроде WebDriver, которое работало на любой версии браузера. Я мог бы запустить внешний браузер, такой как FireFox или Chrome. Есть ли в браузерах API? Вот именно тот псевдокод, который я хотел бы реализовать с помощью современного браузера:

ModernBrowser br = new ModernBrowser();
br.Navigate("about:blank"); // clear out last page
if(some_flag)
    br.Navigate(Url); // navigate to new page.
If(done)
    br.Close();
br = null;

Это все, что мне нужно. Смертельно просто. Я пытаюсь реализовать систему воспроизведения мультимедиа. Весь код работает нормально, за исключением тех случаев, когда мне нужен современный браузер для воспроизведения Pandora, Spotify или любых других веб-систем. Все они требуют последних версий браузера или просто не работают. Внедрение движка рендеринга в мое приложение - это кошмар. Конечно, я могу заставить его работать сегодня. Я просто не уверен насчет завтрашнего дня.

1 Ответ

0 голосов
/ 22 февраля 2020

Я решил попробовать CefSharp, и он работает. Я понимаю, что мне придется обновлять это время от времени. Я хочу отметить, что если вы решите использовать CefSharp в качестве встроенного браузера, не используйте NuGet в вашем живом проекте. Создайте одноразовый проект и установите сборки CefSharp. На дату этой записи установка Nuget нарушает ваш проект C# и делает каждую сборку непригодной для использования. Я создал одноразовый проект, добавил сборки CefSharp, а затем взял зависимые двоичные файлы и поместил их в новую папку. Я сделал мой живой проект мишенью X86, и это работает.

...