Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.07.2020, 12:49   #1
fanat_96
Пользователь
 
Регистрация: 09.04.2016
Сообщений: 81
По умолчанию Альтернативы Webbrowser

Здравствуйте. Ввиду того, что webbrowser в последнее время совсем коряво обрабатывает ajax на сайтах, где я его использую, задумался о том, чтобы заменить его чем-то.
Подскажите какие-нибудь альтернативы, пожалуйста.
Желательно, чтобы не пришлось менять разрядность проекта или копаться в исходных файлах проекта, как это с CefSharp происходит.

Пробовал Awesomium, но он еще более коряво отображает сайт - половины шаблона вообще не видно.
Слышал, что появился webView (или webView2), эмулирующий Edge, но у меня VS 2015, а в ней его, вроде нет. Если ошибаюсь, поправьте)

Пока остановил свой выбор на EO.WebBrowser, но это коммерческий продукт и фиг знает сколько он будет работать, если его не купить.

Selenium не вариант, т.к. нужно отображение сайта непосредственно на форме.
fanat_96 вне форума Ответить с цитированием
Старый 21.07.2020, 13:04   #2
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Сообщение от fanat_96 Посмотреть сообщение
Ввиду того, что webbrowser в последнее время совсем коряво обрабатывает ajax на сайтах,
WebBrowser - это надстройка над IE, которая работает по умолчанию в режиме IE 7. Отсюда и кривизна в отображении современных страниц. Можно изменить его режим работы через реестр (нежелательный вариант) или специальный метатег на сайте. Подробнее тут.

Ещё можно попробовать Chromium Embedded Framework (CEF).
Streletz вне форума Ответить с цитированием
Старый 21.07.2020, 13:47   #3
fanat_96
Пользователь
 
Регистрация: 09.04.2016
Сообщений: 81
По умолчанию

Цитата:
Сообщение от Streletz Посмотреть сообщение
работает по умолчанию в режиме IE 7
Это я знаю, поэтому эмулирую 11 версию. Но проблема в том, что даже в полноценном IE 11 не работают нужные функции.

Ну а CEF, как я и говорил, требует перевода проекта в другую разрядность, из-за чего некоторые используемые библиотеки перестают адекватно работать.
fanat_96 вне форума Ответить с цитированием
Старый 21.07.2020, 19:05   #4
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Сообщение от fanat_96 Посмотреть сообщение
Это я знаю, поэтому эмулирую 11 версию.
Так IE 11 давно устарел. Правда не настолько, как IE 7, но всё же...

Можно ещё посмотреть в сторону FireFox (документация). Но, скажу честно, я этим способом не пользовался. Поэтому без гарантий.
Streletz вне форума Ответить с цитированием
Старый 21.07.2020, 19:13   #5
fanat_96
Пользователь
 
Регистрация: 09.04.2016
Сообщений: 81
По умолчанию

Цитата:
Сообщение от Streletz Посмотреть сообщение
Можно ещё посмотреть в сторону FireFox
Подключил geckofx 60. Вроде в нем можно реализовать все, что мне надо) Большое спасибо)

Только немножко непонятно по поводу поддержки. По ссылке, что Вы указали, написано, что технология больше не поддерживается. В том же Nuget регулярно публикуют разные версии geckofx. Вижу, что 45 не поддерживается с 2017. Но geckofx 60 обновляется постоянно.
fanat_96 вне форума Ответить с цитированием
Старый 21.07.2020, 19:46   #6
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Сообщение от fanat_96 Посмотреть сообщение
Только немножко непонятно по поводу поддержки. По ссылке, что Вы указали, написано, что технология больше не поддерживается. В том же Nuget регулярно публикуют разные версии geckofx. Вижу, что 45 не поддерживается с 2017. Но geckofx 60 обновляется постоянно.
По ссылке написано, что она deprecated. Т.е. она поддерживается, но не развивается, т.к. объявлена устаревшей. Но, нужно учесть, что Mozilla это всё-таки open sourse и проект (даже deprecated) может поддерживаться сообществом (как в случае с geckofx).
Streletz вне форума Ответить с цитированием
Старый 22.07.2020, 11:08   #7
fanat_96
Пользователь
 
Регистрация: 09.04.2016
Сообщений: 81
По умолчанию

И чтобы не создавать новую тему, подскажите, может Вы знаете есть ли решение, позволяющие автоматически заполнить input type="file"?

В webbrowser я использовал такое решение, найденное на просторах stackoverflow:
Код:
//Вставляем торрент
        async Task PopulateInputFile(GeckoHtmlElement file)
        {
            file.Focus();
            string a = Properties.Settings.Default.diskString;
            // delay the execution of SendKey to let the Choose File dialog show up
            var sendKeyTask = Task.Delay(1500).ContinueWith((_) =>
            {
                // this gets executed when the dialog is visible
                SendKeys.Send(a + getTorrent + "{ENTER}");
            }, TaskScheduler.FromCurrentSynchronizationContext());

            file.Click(); // this shows up the dialog

            await sendKeyTask;

            // delay continuation to let the Choose File dialog hide
            await Task.Delay(1000);
        }

        //вставляем постер
        async Task PopulateInputFile_poster(GeckoHtmlElement file_poster)
        {
            file_poster.Focus();

            // delay the execution of SendKey to let the Choose File dialog show up
            var sendKeyTask = Task.Delay(1500).ContinueWith((_) =>
            {
                // this gets executed when the dialog is visible
                SendKeys.Send(Properties.Settings.Default.diskString  + "poster.jpg" + "{ENTER}");
            }, TaskScheduler.FromCurrentSynchronizationContext());

            file_poster.Click(); // this shows up the dialog

            await sendKeyTask;

            // delay continuation to let the Choose File dialog hide
            await Task.Delay(1000);
        }
}

async Task Populate()
        {
            var elements = geckoWebBrowser1.Document.GetElementsByTagName("input");

            // торрент
            foreach (GeckoHtmlElement file in elements)
            {
                if (file.GetAttribute("name") == "file")
                {
                    file.Focus();
                    await PopulateInputFile(file);
                }
            }

            //постер
            foreach (GeckoHtmlElement file_poster in elements)
            {
                if (file_poster.GetAttribute("name") == "screen")
                {
                    file_poster.Focus();
                    await PopulateInputFile_poster(file_poster);
                }
}
            }
И на кнопке, где происходит вызов этих методов, следующее:
Код:
 Populate().ContinueWith((_) =>
            {

            }, TaskScheduler.FromCurrentSynchronizationContext());

В webbrowser такой способ работал отлично, никогда проблем не возникало. А вот в Геко есть моменты, когда не фиксируется нажатие клавиши enter, из-за этого окно выбора файла остается висеть, а остальные появляются уже поверх него. Это, конечно, не критично, можно самому нажать enter, но хотелось бы полностью автоматизировать данную операцию)
fanat_96 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите альтернативы InstallShield, InnoSetup Dennis777 Свободное общение 6 03.02.2015 09:08
Альтернативы RichText Utkin Компоненты Delphi 21 02.04.2013 14:28
Альтернативы Java Sna1L Общие вопросы по Java, Java SE, Kotlin 4 18.09.2012 17:07
Ищу альтернативы моей программе mayonezer1 Помощь студентам 3 14.06.2012 19:14
Программер и Photoshop какие есть альтернативы? ZvEr_HaCkEr Моделирование, изометрия, photoshop, 3d редакторы 18 08.08.2010 09:59