Pull to refresh

Comments 52

Спасибо большое. А то я однажды искал webKit под C# по попадались только одни ужасы вида обёртки вокруг хромиума. Будем пробовать :)
Стоило посмотреть еще в сторону xilium.cefglue. Использовал в одном проекте, остался доволен.
Сейчас точно не скажу, но в комплекте с самим CEF3 емнип чуть меньше 60мб. Где-то 56мб — 58мб.
xulrunner весит около 10Мб
Awesomium около 20Мб
подразумеваю полный комплект для работы.
Я специально выбирал по легче, т.к. программу скачивают в регионах где инет слабый.
Прошу прощения. Это я вместе с debug сборкой сказал. Сам CEF3 + xilium.cefglue весят около 35мб, но это с видео кодеками и поддержкой WebGL. Если попробовать собрать без всего этого, то будет меньше
UFO just landed and posted this here
UFO just landed and posted this here
Я когда с gecko на Awesomium перешел, не мог нарадоваться. И код приятный и мануал имеется.
UFO just landed and posted this here
>В определенный момент мне стало некомфортно использовать стандартный контрол WebBrouser

А я даже знаю почему — компилятор постоянно писал «класс не найден», да?
Уже все пошутили над этой опечаткой)
Исправлено.
Из браузерных контролов пользовался OpenWebKitSharp

Неплохо. Только много чего тянет — потому тяжёлый( + 50 m).

И ещё Json Parser из коробки заменил на Newtonsoft
Не ожидал, что есть столько альтернатив стандартному контролу (один из тех постов, где комменты увеличивают его ценность). Спасибо за наводки! :)
Awesomium отличная штука, юзал его в дипломной работе.
Проект был на WPF, так что кому актуально — есть и WPF-ная версия, с ней все отлично (но процесс «прикручивания» контрола, естественно, будет отличаться).
Право не знаю из какого нафталина вы достали скайбоунд и geckofx с гуглкода. А глядя на ваши муки с ними аж слезы наворачиваются. Оба этих проекта мертвы, сударь. А вот их логическое продолжение — bitbucket.org/geckofx/geckofx-18.0 они выходят примерно след в след за новыми версиями firefox/xulrunner. Проект живой и там есть и поддержка winforms для любителей античности и wpf для любителей ретро.

Awesomium так себе, у него даже лицензия вражеская. А ведь есть такие проекты как Xilium.CefGlue (его уже упоминали).
Каждая следующая версия FF все тяжелее и тяжелее, как по нагрузке, так и по объему, а для меня очень важен был каждый Мб.
На тот момент когда я от него отказался(примерно 1.5 года назад) самая стабильная была именно описанная версия.
И если бы не проблемы обработки JS я бы на ней остался.

К сравнению xulrunner 1.9v весил 10Мб и кушал оперативы около 20Мб
А тот же Awesomium весит 20Мб и оперативы съедает около 60Мб

В общем каждый сам решает, какие параметры при выборе ему важнее.
Не забывайте что в случае с ФФ и с Хромиумом с каждым выпуском прибавляются и багфиксы и исправления критических дыр безопасности. Встраивание браузера это конечно хорошо но не для критических приложений. Там еще есть одна большая проблема все движки браузеров поддерживают пока только х32 архитектуру есть найт билды под х64 но они остаются найтами.
я правильно понимаю, для этого компонента на клиентскую машину надо ставить FF? Если это так то не везде такое дадут сделать.
Нет, причем здесь FF когда речь идет о xulrunner, его вы должны иметь на машине жертвы, а его «ставить» не обязательно можно с собой прихватить.
Предупреждение 1 Несоответствие между архитектурой процессора проекта «MSIL», построение которого выполняется, и архитектурой процессора ссылки «Awesomium.Core, Version=1.7.0.3, Culture=neutral, PublicKeyToken=e1a0d7c8071a5214, processorArchitecture=x86», «x86». Это несоответствие может привести к ошибкам во время выполнения. Попробуйте изменить целевую архитектуру процессора для проекта с помощью диспетчера конфигураций, чтобы согласовать архитектуры процессоров для проекта и ссылок, или используйте зависимость от ссылок с архитектурой процессора, соответствующей целевой архитектуре процессора проекта. WindowsFormsApplication7

Как выправить? Что не так? Делаю как описано…
В свойствах проекта выберите Build -> Platform target -> x86.
Еще не могу найти Awesomium.dll, где его брать?
в 1.7 версии Awesomium.dll лежит в build ->bin
остальные wrappers->AwesomiumNET->Assemblies
Еще хотел добавить, что в 1.7 немного отлечается архитектура, они ввели понятие сессий.
Чуть позже допишу статью с пометкой для этой версии.
Было бы чудесно! Подскажите как просто загрузить страницу 1.7, а то LoadURL пишет устарел…
webControl1.Source = new Uri("http://www.google.com/ncr");
в папке wrappers\AwesomiumNET\Samples\Windows Forms\CSharp\WinFormsSample
есть пример, он реализован не через контрол, но в целом в нем есть, что подсмотреть.
там же рядом лежит папка с примерами использования JS
awesomium отличный контрол. Только вот с Proxy разобраться не получается. Для прокси нужно юзать сессии?
Почему так не работает?
WebPreferences ds = new WebPreferences();
            ds.ProxyConfig = "myproxy:80";
            using (WebSession session = WebCore.CreateWebSession(ds))
            {
                webControl1.Source = new Uri("http://google.com");
                
            }


Как правильно сделать?
Документации для 1.7 пока к сожалению нет. Все примеры для 1.6.3. Рискну предположить, раз это версия
1.7 Final Release Candidate, возможно часть функционала там просто еще не работает. Я пока использую 1.6.3.
Немного попробовал Awesomium 1.7 для автоматизации действий на сложных страницах со скриптами, где просто парсить HTML и отправлять запросы сложно.

Как-то не очень понравилось:
1. Заполнение полей, кликанье кнопок и т.п. только через выполнение Javascript.
2. (баг?) DocumentReady срабатывает когда документ еще не готов или как-то так. Он не null, но getElementById не находил на странице элементы, если Thread.Sleep(250), то ок. Решил так:
    WbAws.LoadingFrameCompleted += OnLoadingFrameCompleted;
    WbAws.Source = new Uri("http://google.com");
    
    private void OnLoadingFrameCompleted(...)
    { 
       if (webView == null || !webView.IsLive || webView.ParentView != null || !e.IsMainFrame)
         return;

        LoadingFrameCompleted -= OnLoadingFrameCompleted;
    }


Еще столкнулся со странным багом в инсталлере: он почему-то закинул примеры (Samples) не в Documents\Visual Studio, как указано в ридми, а в корень совершенно другого диска, в папку VS10_PROJECTS (ее там не было), еле нашел, в вин8 еще и ярлык на них не создался на стартовом экране. Причем также и на виртуальной с машине.
А как у всех перечистенных обстоят дела с печатью? У WebBrowser есть одна проблема, а точнее у него нет нормальной программной возможности выбрать принтер и изменить его настройки для печати. Проблемы решаются подменой принтера по умолчанию и правкой реестра в случае необходимости изменить настройки принтера что является костылём. В принципе понятно почему (WebBrowser является только обёрткой вокруг ActiveX IE) но легче жить от этого не становится.

п.с. когда столкнулся с этой проблемой глазам своим не поверил, на дворе 2013й .net 4.5 а контрол через который предполагается смотреть html и прочие документы не умеет толком программо работать с принтером.

Кстати, посоветуйте, может есть решение такой проблемы.

Спасибо
Спасибо!
Попробую Awesomium. Возможно подойдет мне. Хочу удобную работу с элементами при помощи XPath.
Ну там нет XPath встроенного куда-либо, но можно через JS document.evaluate XPath использовать

// returns Javascript XPath query string for getting a single element 
public static string GetJsSingleXpathString(string xpath)
{
    return
       String.Format(
			"document.evaluate(\"{0}\", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue", xpath);
}

// returns Javascript XPath query string for getting a collection of elements
public static string GetJsXpathString(string xpath)
{
    return
    String.Format(
			"document.evaluate(\"{0}\", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null)", xpath);
}

string linkJsXpath = GetJsSingleXpathString("//a[contains(@href, 'example.com')]");
 
dynamic link = (JSObject) webControl.ExecuteJavascriptWithResult(linkJsXpath);
if (link == null)
{
    MessageBox.Show("No link found!");
    return;
}

// do something with the element
string url = link.href;
MessageBox.Show(url);
Awesomium не работает с https? Или я просто найти не могу?
У меня не открывает https:// сайт, может я конечно что то не то делаю?
Должно работать. Сайт-то какой?
локальный портал, на работе.
Видимо проблема в том что локальный ресурс настроен на работу по https но сертификата безопасности нет. Как это побороть?
А если в WebPreferences поставить WebSecurity в False? (там все ридонли, надо устанавливать либо при создании websession/webview, либо из XAML если WPF, либо из WebPreferencesProvider'a если WinForms)

«не открывает» как именно? В событии LoadingFrameFailed какую-нибудь ошибку выдает?

Еще там есть событие CertificateError и по идее можно сделать так:
    void webControl1_CertificateError(object sender, CertificateErrorEventArgs e)
    {
        e.Ignore = true;
        e.Handled = EventHandling.Modal;
    }
Я на Visual Basic.NET учусь писать
попробовал вот так:
    Private Sub WebControl1_CertificateError(sender As Object, e As Awesomium.Core.CertificateErrorEventArgs) Handles WebControl1.CertificateError
        e.Ignore = True
        e.Handled = Awesomium.Core.EventHandling.Modal
    End Sub

Не получилось.
Событие-то срабатывает вообще? Может не в этом дело вообще.

HTTPS сертификат просто самоподписанный или что? Я проверил, вроде бы работает с вышеописанной обработкой CertificateError.

LoadingFrameFailed (с IsMainFrame == true) срабатывает? В ErrorCode/Description есть что-то?
Очень странно, так как если перехожу на сайт допустим нажимая кнопку то отрабатывает нормально.
    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        WebControl1.Source = New Uri("https://site.pru")
    End Sub


Если указываю site.pru как current url то не открывает.
эм… Current Url это где? В дизайнере формы что ли? Вроде нет нигде такого, переход через установку Source и есть стандартный способ для выполнения сего действия. Естественно не обязательно на кнопке, можно и в Form_Load, например.
Current Url это свойство Source WebControl1, то есть это страница которая загружается в момент загрузки формы. обычные сайты нормально открывает, а https не открывает.
А, и причем тут «current url»?
Ну у меня работает и так.
Странно у меня не работает, current url это я просто из описания свойства вычитал.
И еще небольшой вопрос, как программно заполнять textbox (авторизации допустим) захожу на сервер и всплывает окно то что для доступа нужна авторизация, с элементом из IE это решалось тем что IE просто запоминал логин и пароль.
Тут answers.awesomium.com/index.html подобный вопрос почти каждый день задают :)
answers.awesomium.com/questions/4168/enter-text-in-web-form-from-textbox.html
answers.awesomium.com/questions/829/index.html

Есть несколько способов.
Можно просто Javascript выполнять:
webControl.ExecuteJavascript("document.getElementById('passwordTextbox').value='password'");


Но обычно (хотя для локального своего сайта может и все равно) лучше использовать что-то типа такого, чтобы можно было проверить, что элемент существует на странице и т.п.
dynamic tbox = (JSObject) webControl.ExecuteJavascriptWithResult("document.getElementById('passwordTextbox')");

if (tbox == null)
    выкинуть исключение об ошибке и т.д.

tbox.value = "password";


Или если в VB нет dynamic, то так:
JSObject tbox = webControl.ExecuteJavascriptWithResult("document.getElementById('passwordTextbox')");

if ((tbox == null) || !tbox.HasProperty("value"))
    выкинуть исключение об ошибке и т.д.

tbox["value"] = "password";


Аналогичным образом можно также нажать кнопку (через метод click() у нее) или отправить форму (через метод submit()), методы через Invoke вызываются у JSObject.

Ловить завершение загрузки страницы можно в событии LoadingFrameCompleted (когда e.IsMainFrame == true)
Sign up to leave a comment.

Articles