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

суббота, 9 февраля 2013 г.

Как удалить кукисы (cookies) в TChromium

В комментариях к статье о начале работы с TChromium спросили, как удалить в нем кукисы? Скажу сразу, решение не мое, нашла в свое время на СтэкОверфлоу, скопировала и с тех пор удачно использую.

Сначала надо отметить, что у интерфейса ICefCookieManager есть метод DeleteCookies, но он почему-то не работает. То есть в результате выполнения кода:

procedure TfrmMain.btnDeleteCookiesClick(Sender: TObject);
var
  CookieManager: ICefCookieManager;
begin
  CookieManager := TCefCookieManagerRef.GetGlobalManager;
  if not CookieManager.DeleteCookies('', '') then
    ShowMessage('Кукисы не удалены!');
end;

заведомо появится сообщение, что удаление кукисов провалилось. Не знаю, может, это только у меня так...

Решение же таково: надо обойти все хранящиеся кукисы с помощью VisitAllCookiesProc и внутри visitor-а установить их свойство deleteCookie равным True (1).

procedure TfrmMain.btnDeleteCookiesClick(Sender: TObject);
var
  CookieManager: ICefCookieManager;
begin
  CookieManager := TCefCookieManagerRef.GetGlobalManager;
  CookieManager.VisitAllCookiesProc(
    function(const name, value, domain, path: ustring; secure, httponly,
      hasExpires: Boolean; const creation, lastAccess, expires: TDateTime;
      count, total: Integer; out deleteCookie: Boolean): Boolean
    begin
      deleteCookie := True;
      ShowMessage('Кукисы для домена ' + domain + ' удалены!');
    end
  );
end;


суббота, 26 января 2013 г.

SQLite и Delphi 7: работа с БД с помощью DISQLite

Для тех, кто случайно наткнулся на эту статью. Я хочу провести эксперимент с продвижением в социальной сети VK.com, используя автоматизацию. Для этого я пишу (пусть и очень медленно, в свободное время) свое приложение и частично освещаю ход работ на этом блоге.

В предыдущей серии я рассказала про компонент для браузера, который буду использовать. Настало время определиться с данными.

Сначала хотела вообще обойтись без БД, а заодним и описать работу с XML, но, подумав, решила, что без базы будет сложно (и неудобно, если пользователей заведется много). Особенно, если разрабатывать с перспективами. Поэтому сегодня речь пойдет о SQLite.

Чем руководствовалась при выборе БД?
  • Максимальная простота и легкость.
  • Минимум телодвижений для работы приложения на другой машине: надо просто скопировать все содержимое папки к себе (кроме файлов БД нужна только dll).

понедельник, 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.

Поделиться