Комментарии 52
Спасибо большое. А то я однажды искал webKit под C# по попадались только одни ужасы вида обёртки вокруг хромиума. Будем пробовать :)
Стоило посмотреть еще в сторону xilium.cefglue. Использовал в одном проекте, остался доволен.
Сколько весит библиотека?
Сейчас точно не скажу, но в комплекте с самим CEF3 емнип чуть меньше 60мб. Где-то 56мб — 58мб.
xulrunner весит около 10Мб
Awesomium около 20Мб
подразумеваю полный комплект для работы.
Я специально выбирал по легче, т.к. программу скачивают в регионах где инет слабый.
Awesomium около 20Мб
подразумеваю полный комплект для работы.
Я специально выбирал по легче, т.к. программу скачивают в регионах где инет слабый.
>В определенный момент мне стало некомфортно использовать стандартный контрол WebBrouser
А я даже знаю почему — компилятор постоянно писал «класс не найден», да?
А я даже знаю почему — компилятор постоянно писал «класс не найден», да?
Из браузерных контролов пользовался OpenWebKitSharp
Неплохо. Только много чего тянет — потому тяжёлый( + 50 m).
И ещё Json Parser из коробки заменил на Newtonsoft
Неплохо. Только много чего тянет — потому тяжёлый( + 50 m).
И ещё Json Parser из коробки заменил на Newtonsoft
Не ожидал, что есть столько альтернатив стандартному контролу (один из тех постов, где комменты увеличивают его ценность). Спасибо за наводки! :)
Awesomium отличная штука, юзал его в дипломной работе.
Проект был на WPF, так что кому актуально — есть и WPF-ная версия, с ней все отлично (но процесс «прикручивания» контрола, естественно, будет отличаться).
Проект был на WPF, так что кому актуально — есть и WPF-ная версия, с ней все отлично (но процесс «прикручивания» контрола, естественно, будет отличаться).
Право не знаю из какого нафталина вы достали скайбоунд и geckofx с гуглкода. А глядя на ваши муки с ними аж слезы наворачиваются. Оба этих проекта мертвы, сударь. А вот их логическое продолжение — bitbucket.org/geckofx/geckofx-18.0 они выходят примерно след в след за новыми версиями firefox/xulrunner. Проект живой и там есть и поддержка winforms для любителей античности и wpf для любителей ретро.
Awesomium так себе, у него даже лицензия вражеская. А ведь есть такие проекты как Xilium.CefGlue (его уже упоминали).
Awesomium так себе, у него даже лицензия вражеская. А ведь есть такие проекты как Xilium.CefGlue (его уже упоминали).
Каждая следующая версия FF все тяжелее и тяжелее, как по нагрузке, так и по объему, а для меня очень важен был каждый Мб.
На тот момент когда я от него отказался(примерно 1.5 года назад) самая стабильная была именно описанная версия.
И если бы не проблемы обработки JS я бы на ней остался.
К сравнению xulrunner 1.9v весил 10Мб и кушал оперативы около 20Мб
А тот же Awesomium весит 20Мб и оперативы съедает около 60Мб
В общем каждый сам решает, какие параметры при выборе ему важнее.
На тот момент когда я от него отказался(примерно 1.5 года назад) самая стабильная была именно описанная версия.
И если бы не проблемы обработки JS я бы на ней остался.
К сравнению xulrunner 1.9v весил 10Мб и кушал оперативы около 20Мб
А тот же Awesomium весит 20Мб и оперативы съедает около 60Мб
В общем каждый сам решает, какие параметры при выборе ему важнее.
Не забывайте что в случае с ФФ и с Хромиумом с каждым выпуском прибавляются и багфиксы и исправления критических дыр безопасности. Встраивание браузера это конечно хорошо но не для критических приложений. Там еще есть одна большая проблема все движки браузеров поддерживают пока только х32 архитектуру есть найт билды под х64 но они остаются найтами.
я правильно понимаю, для этого компонента на клиентскую машину надо ставить FF? Если это так то не везде такое дадут сделать.
Предупреждение 1 Несоответствие между архитектурой процессора проекта «MSIL», построение которого выполняется, и архитектурой процессора ссылки «Awesomium.Core, Version=1.7.0.3, Culture=neutral, PublicKeyToken=e1a0d7c8071a5214, processorArchitecture=x86», «x86». Это несоответствие может привести к ошибкам во время выполнения. Попробуйте изменить целевую архитектуру процессора для проекта с помощью диспетчера конфигураций, чтобы согласовать архитектуры процессоров для проекта и ссылок, или используйте зависимость от ссылок с архитектурой процессора, соответствующей целевой архитектуре процессора проекта. WindowsFormsApplication7
Как выправить? Что не так? Делаю как описано…
Как выправить? Что не так? Делаю как описано…
Еще не могу найти Awesomium.dll, где его брать?
в 1.7 версии Awesomium.dll лежит в build ->bin
остальные wrappers->AwesomiumNET->Assemblies
Еще хотел добавить, что в 1.7 немного отлечается архитектура, они ввели понятие сессий.
Чуть позже допишу статью с пометкой для этой версии.
остальные wrappers->AwesomiumNET->Assemblies
Еще хотел добавить, что в 1.7 немного отлечается архитектура, они ввели понятие сессий.
Чуть позже допишу статью с пометкой для этой версии.
Было бы чудесно! Подскажите как просто загрузить страницу 1.7, а то LoadURL пишет устарел…
Поздно написал… Sorry!
awesomium отличный контрол. Только вот с Proxy разобраться не получается. Для прокси нужно юзать сессии?
Почему так не работает?
Как правильно сделать?
WebPreferences ds = new WebPreferences();
ds.ProxyConfig = "myproxy:80";
using (WebSession session = WebCore.CreateWebSession(ds))
{
webControl1.Source = new Uri("http://google.com");
}
Как правильно сделать?
Немного попробовал Awesomium 1.7 для автоматизации действий на сложных страницах со скриптами, где просто парсить HTML и отправлять запросы сложно.
Как-то не очень понравилось:
1. Заполнение полей, кликанье кнопок и т.п. только через выполнение Javascript.
2. (баг?) DocumentReady срабатывает когда документ еще не готов или как-то так. Он не null, но getElementById не находил на странице элементы, если Thread.Sleep(250), то ок. Решил так:
Еще столкнулся со странным багом в инсталлере: он почему-то закинул примеры (Samples) не в Documents\Visual Studio, как указано в ридми, а в корень совершенно другого диска, в папку VS10_PROJECTS (ее там не было), еле нашел, в вин8 еще и ярлык на них не создался на стартовом экране. Причем также и на виртуальной с машине.
Как-то не очень понравилось:
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 и прочие документы не умеет толком программо работать с принтером.
Кстати, посоветуйте, может есть решение такой проблемы.
Спасибо
п.с. когда столкнулся с этой проблемой глазам своим не поверил, на дворе 2013й .net 4.5 а контрол через который предполагается смотреть html и прочие документы не умеет толком программо работать с принтером.
Кстати, посоветуйте, может есть решение такой проблемы.
Спасибо
Спасибо!
Попробую Awesomium. Возможно подойдет мне. Хочу удобную работу с элементами при помощи XPath.
Попробую 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 и по идее можно сделать так:
«не открывает» как именно? В событии 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 есть что-то?
HTTPS сертификат просто самоподписанный или что? Я проверил, вроде бы работает с вышеописанной обработкой CertificateError.
LoadingFrameFailed (с IsMainFrame == true) срабатывает? В ErrorCode/Description есть что-то?
эм… Current Url это где? В дизайнере формы что ли? Вроде нет нигде такого, переход через установку Source и есть стандартный способ для выполнения сего действия. Естественно не обязательно на кнопке, можно и в Form_Load, например.
Current Url это свойство Source WebControl1, то есть это страница которая загружается в момент загрузки формы. обычные сайты нормально открывает, а https не открывает.
Не вижу нигде такого свойства. Вы где это нашли?:)
Скриншот

А, и причем тут «current url»?
Ну у меня работает и так.
Ну у меня работает и так.
Странно у меня не работает, current url это я просто из описания свойства вычитал.
И еще небольшой вопрос, как программно заполнять textbox (авторизации допустим) захожу на сервер и всплывает окно то что для доступа нужна авторизация, с элементом из IE это решалось тем что IE просто запоминал логин и пароль.
И еще небольшой вопрос, как программно заполнять 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 выполнять:
Но обычно (хотя для локального своего сайта может и все равно) лучше использовать что-то типа такого, чтобы можно было проверить, что элемент существует на странице и т.п.
Или если в VB нет dynamic, то так:
Аналогичным образом можно также нажать кнопку (через метод click() у нее) или отправить форму (через метод submit()), методы через Invoke вызываются у JSObject.
Ловить завершение загрузки страницы можно в событии LoadingFrameCompleted (когда e.IsMainFrame == true)
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)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Как подключить сторонний браузер в приложении на C#