Поиск по блогу

понедельник, 14 января 2013 г.

Компонент TChromium: начало работы, установка

Сегодня речь пойдет о компоненте TChromium (dcef3). Что это за компонент и в чем его преимущества перед стандартным TWebbrowser?

Я могу назвать 2 главных преимущества, например, в привязке к разработке утилиты для Вконтакта. Во-первых, он пошустрее будет. Во-вторых, в нем очень удобная и простая работа с cookies.

Поясню второй пункт. Например, нам надо, чтобы через одну форму можно было работать с несколькими аккаунтами vk.com без постоянного "перелогинивания". В Webbrowser-е это можно организовать только шаманскими методами, а вот в Chromium-e решение выглядит очень красиво и просто.

Установка DCEF3 в Delphi7 (компонент TChromium)

На Googlecode можно найти 2 версии: старую (http://code.google.com/p/delphichromiumembedded/) и поновее (http://code.google.com/p/dcef3/). Рекомендую вторую.
  1. Скачиваем свежий дистрибутив с помощью SVN в папку c:\Program Files\Borland\Delphi7\Lib\dcef3.
  2. Загружаем Delphi, выбираем через "Open" пакет для D7, компилируем и инсталлируем. Если все хорошо, покажут TChromium в списке доступных компонентов на отдельной новой вкладке.
  3. Закрываем пакет, не сохраняя изменения в проекте.
  4. Проверяем Chromium в работе.

Тестирование работы компонента

Для теста создадим на форме 2 браузера, которые будут работать с независимыми друг от друга кукисами. С компонентом TWebbrowser такого так просто не добиться.

Размещаем на форме компонент TChromium и 2 кнопки.

В папку с проектом (или туда, куда компиллируется программа) копируем dll-ки из c:\Program Files\Borland\Delphi7\Lib\dcef3\bin\Win32\.

В uses дописываем библиотеку ceflib.

В обработчиках нажатия кнопок пишем:

const
  DefaultCookiesDir = 'Cookies/';
...
procedure TForm1.Button1Click(Sender: TObject);
var
  CookieManager: ICefCookieManager;
  CookiesPath  : String;
begin
  CookiesPath := ExtractFilePath(Application.ExeName) + DefaultCookiesDir + 'User1';
  CookieManager := TCefCookieManagerRef.Global;
  CookieManager.SetStoragePath(CookiesPath);
  Chromium1.Load('vk.com');
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  CookieManager: ICefCookieManager;
  CookiesPath  : String;
begin
  CookiesPath := ExtractFilePath(Application.ExeName) + DefaultCookiesDir + 'User2';
  CookieManager := TCefCookieManagerRef.Global;
  CookieManager.SetStoragePath(CookiesPath);
  Chromium1.Load('vk.com');
end;

Не ждите, что это уже получилось супер-приложение :) Я просто привожу пример, как для TChromium можно с легкостью переключать папки, в которых браузер хранит кукисы.

Нажимаем на первую кнопку, логинимся:
Нажимаем на вторую кнопку. Второй раз браузер будет использовать совсем другие кукисы, поэтому загружается главная страница.
При этом автоматически создаются подкаталоги в папке Cookies.


Если после этого снова нажать на первую кнопку, то загрузится страница пользователя, под которым логинились вначале.

Тут видно еще один плюс для приложения, работающего с множеством юзеров. Кукисы сохраняются, поэтому в течение их срока жизни каждый раз логиниться не надо — достаточно просто проверять, что залогинены.

Чтобы быть в курсе обновлений блога, можно подписаться на RSS.

Статьи схожей тематики:



32 комментария:

  1. Жду продолжения) Особенно интересует как очистить кукисы.

    ОтветитьУдалить
  2. Здравствуйте. Спасибо за статьи. Возможны ли в TCromium такие же действия как в TWebBrowser, например, найти линк и симитиравать переход по нему, или найти форму и заполнить ее. Зарание спасибо.

    ОтветитьУдалить
  3. Олег, написала про очистку кукисов тут.

    Сергей, да, конечно, можно. Как будет время, напишу об этом на блоге.

    ОтветитьУдалить
  4. Спасибо Вам огромное!!!!!

    Я уже отчаялся, думал не найду информацию про этот компанент. Подписался на ваши посты.
    Жду новых статей на тему DELPHI .

    Спасибо!

    ОтветитьУдалить
  5. ICefCookieManager

    Где искать? выдает ошибку Chromium стоит.
    что за компонент RAD 2010 и XE3

    ОтветитьУдалить
  6. D7 + dcef3 = EExternalException in module libcef.dll
    Просто добавил на форму компонент и запустил

    ОтветитьУдалить
    Ответы
    1. Попробуйте просто откомпилировать и запустить непосредственно получившийся .exe-файл.

      Удалить
    2. Спасибо, статья весьма познавательная.

      *Ошибка забавная, эти же dll, подключенные к скомпилированному из ХЕ3 приложению, работают на ура.

      **Почему-то по компоненту крайне мало информации даже на magpcss.org (или я просто искать не умею?) Где Вы берете описание его свойств/процедур/функций? Я не смог найти ни мануала, ни faq, ни даже example :(

      Удалить
    3. blog, я не нашла, где бы все было в одном месте... Что-то нахожу на StackOverflow, что-то по другим форумам, что-то додумываю по исходникам :) К сожалению, из-за катастрофической нехватки времени уже давно не садилась за программирование)

      Удалить
  7. Программа с Chromium отображается в статистике сайтов как старая версия Хрома. Можно ли как то это изменить? В TWebBrowser, например, можно записать в реестр версию IE и он будет отображаться как 8 или 9 IE. А как с Chromium?

    ОтветитьУдалить
    Ответы
    1. Я не знаю ответа. Может, кто-нибудь из читателей подскажет.

      Удалить
    2. Предположу что можно в событии onBeforeResourceLoad попытаться перехватить user agent или пройтись редактором ресурсов по библиотекам.

      Удалить
    3. Спасибо. Почти нашел ответ. Версия хрома зависит насколько "свежий" dcef3 установили. На данный момент - показывает 25 Хром.

      Удалить
  8. Может вам известна ошибка при инсталяции DCEF на XE2 -

    [DCC Error] ceffmx.pas(427): E2003 Undeclared identifier: 'type_'

    ОтветитьУдалить
  9. Ждем новых уроков,например как нажать на кнопки и.т.д

    ОтветитьУдалить
  10. Здорово бы было найти информацию по установке сокс-прокси одновременно для нескольких эксемпляров браузера

    ОтветитьУдалить
  11. Недавно стал использовать TWebBrowser пошли баги вешает программу перешел на TChromium стало полегче но все рано на js c сайтов начинает жрать память и в итоге опять вешает программу скрипты проверенные рабочие предназначены к доступу финансовым ресурсам типа http://www.dukascopy.com/swiss/russian/marketwatch/webproducts/charts/ в мозиле вроде все нормально работает ну естественно памяти выжирает под 300мб что не айс хотел бы узнать кто сталкивался с такими траблами и где почитать манул времени на эксперименты нет или может есть подобное от Geko или еще какой компонент а то надо все уперлось в это. Если что могу выслать пример приложения написанного на Delphi XE2

    ОтветитьУдалить
  12. Delphi XE3, dcef3 скачивал, при запуске Invalid CEF Library version

    ОтветитьУдалить
  13. Впервые пишу парсер. Накопилось очень много вопросов по компоненту TChromium. Пожалуйста, подскажите инфо-ресурсы по работе с компонентом!

    ОтветитьУдалить
  14. Этот комментарий был удален автором.

    ОтветитьУдалить
  15. Почему-то через этот компонент не работает Flash.:(
    Подскажите пожалуйста, как реализовать корректную работу Flash-приложений через браузер на этом компоненте?

    ОтветитьУдалить
  16. во всех статьях вижу упоминания о классе ICefCookieManager, извиняюсь за вопрос, но откуда вы его берете?

    У Вас примере используется единственная библиотека ceflib, ссылка на исходник:
    https://code.google.com/p/delphichromiumembedded/source/browse/trunk/src/ceflib.pas

    в ней тоже нет класса ICefCookieManager

    ОтветитьУдалить
    Ответы
    1. Это интерфейс. И если внимательно поищете, то найдете его в ceflib (в том числе в файле по ссылке, которую вы привели).

      Удалить
  17. Обнаружил неприятный момент. В папке с программой появляется куча разных файлов, в том числе libcef.dll, который весит почти 32 мегабайта. Их теперь нужно всегда с собой таскать???

    ОтветитьУдалить
  18. Отличные статьи, отличный блог

    ОтветитьУдалить
  19. у меня почемуто долго грузит страницы в чем дело кто в курсе

    ОтветитьУдалить
  20. В новых версиях хромиума стало загружать страницы по 15-30 секунд. Переустанавливал делфи и сам хромиум ничего не помогает, но старые версии работают отлично, но в них нету ICefCookieManager.
    Скиньте пожалуйста нормальную версию хромиума с ICefCookieManager и чтобы он не лагал.

    ОтветитьУдалить
  21. Не работает . показывает ошибку тут ICefCookieManager

    ОтветитьУдалить
  22. Подскажите, почему не работают ссылки для скачивания компоненты?

    ОтветитьУдалить
  23. Этот комментарий был удален автором.

    ОтветитьУдалить

Комментарии модерируются, вопросы не по теме удаляются, троллинг тоже.

К сожалению, у меня нет столько свободного времени, чтобы отвечать на все частные вопросы, так что, может, свой вопрос лучше задать на каком-нибудь форуме?

Поделиться