ПШвИ - ПЕРВЫЙ ШАГ в ИНТЕРНЕТ

ИНТЕРНЕТ-ПОРТАЛ БОЛГАРСКОЙ СОШ №1 

Ваш IP: 54.90.237.148
  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта
Первый Шаг в Интернет ПУБЛИКАЦИИ ПРОГРАММИРОВАНИЕ Chromium. Установка. Работа с компонентом

Chromium. Установка. Работа с компонентом

Печать

Chromium

Chromium – это компонент браузера для Delphi, основанный на движке Chrome. Собственно, в этом и есть его главное преимущество перед стандартным WebBrowser (который основывается на IE). Другое преимущество Chromium – это удобная работа с куками, что незаменимо при работе с социальными сетями. Может, и WebBrowser тоже такое умеет, но даже не стал глубоко копать – т.к. IE – это абсолютное зло)

 

В этой статье речь пойдет о Chromium под Delphi 7. В принципе теоретически он наверное встанет и под Lazarus, особенно старая версия: https://code.google.com/p/delphichromiumembedded/

Установка

Идем за самой свежей версией: https://code.google.com/p/dcef3/

Качаем себе на комп, распаковываем сюда: c:\Program Files (x86)\Borland\Delphi7\Lib\dcef3\

Копируем все файлы исходников из c:\Program Files (x86)\Borland\Delphi7\Lib\dcef3\src в c:\Program Files (x86)\Borland\Delphi7\Lib

Открываем через Delphi 7 пакет  c:\Program Files (x86)\Borland\Delphi7\Lib\dcef3\packages\DCEF_D7.dpk

Делаем компиляцию, инсталлируем.

Теперь в конце списка вкладок должна появиться новая вкладка  Chromium.

Закрываем пакет, изменения не сохраняем, перезапускаем Delphi.

Работа с компонентом

Куки

Создадим новый проект, назовем его допустим DelphiBrowser.

Давайте попробуем загрузить страничку ВК.

На форме размещаем компонент TChromium  и кнопку TBitBtn, вешаем событие на кнопку

1
2
3
4
5
6
7
8
9
10
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  CookieManager: ICefCookieManager;
  CookiesPath : String;
begin
  CookiesPath := ExtractFilePath(Application.ExeName) + ' Cookies/User1';
  CookieManager := TCefCookieManagerRef.Global;
  CookieManager.SetStoragePath(CookiesPath, TRUE );
  Chromium1.Load('http://vk.com/');
end;

В uses проверяем, чтобы был подключен модуль ceflib

В папку с проектом метаем содержимое из c:\Program Files (x86)\Borland\Delphi7\Lib\dcef3\bin\Win32\

Создаем папку Cookies, в ней подпапку User1. Здесь будут лежать куки первого пользователя. Можно создать папку User2 и т.д. и потом переключаться между ними.

Сохраняем изменения и запускаем прогу.

Если все сделано правильно, то при клике на кнопку загрузиться ВК. Войдите под своим логином на сайт, закройте программу. Запустите её снова, нажмите на кнопку. Вы должны оказаться под своим логином, т.е. куки сработали.

Адресная строка

Давайте теперь добавим «адресную строку». Возьмите компонент TLabeledEdit, в заголовок вбейте «Адрес». Поместите вторую кнопку TBitBtn, и повесьте не неё такой обработчик:

1
2
3
4
procedure TForm1.BitBtn2Click (Sender: TObject);
begin
  Chromium1.Load(LabeledEdit1.Text);
end;

Теперь, если мы вобьем в поле адрес и нажмем на кнопку, то произойдет загрузка нужной страницы.

Давайте чуть усложним задачу. Пусть при переходе по ссылкам значение адреса в поле синхронно изменяется.

Выделяем Chromium1 на форме, жмем F11 (вызов Инспектора), переходим на вкладку Events и дважды кликаем на OnAddressChange. Добавляем код

1
2
3
4
5
procedure TForm1.Chromium1AddressChange(Sender: TObject;
  const browser: ICefBrowser; const frame: ICefFrame; const url: ustring);
begin
  LabeledEdit1.Text:=url;
end;

Все, теперь при переходе на другую страницу из браузера её адрес отобразиться в поле.

Скрипты

Теперь рассмотрим как подгружать код JavaScript.

Добавим третью кнопку и прицепим к ней такой обработчик:

1
2
3
4
5
6
7
8
9
10
11
procedure TForm1.BitBtn3Click(Sender: TObject);
var
  code: ustring;
begin
if (Chromium1.Browser.GetMainFrame<>nil) then
  begin
  code:='alert("Hello!");';
  Chromium1.Browser.GetMainFrame.ExecuteJavaScript(code,'',0);
  end
  else ShowMessage('FatalError');
end;

GetMainFrame проверяет, загружена ли страница. GetMainFrame.ExecuteJavaScript выполняет код JS, в данном случае выводит "Hello!". Но понятно что через JS мы можем манипулировать деревом DOM, совершать различные действия (вбивать в поля данные, кликать по кнопкам, получать значения).

Консоль

Давайте теперь зацепим консоль.

Добавим на форму компонент TMemo.

Повесим обработчик в Chromium на OnConsoleMessage, напишем там такой код:

1
2
3
4
5
6
procedure TForm1.Chromium1ConsoleMessage(Sender: TObject;
  const browser: ICefBrowser; const message, source: ustring;
  line: Integer; out Result: Boolean);
begin
  Memo1.Lines.Add(message);
end;

Исходный код страницы

Давайте получим весь html код страницы.

Добавим на форму еще один компонент TMemo.

Повесим обработчик в Chromium на OnLoadEnd, напишем там такой код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure TForm1.Chromium1LoadEnd(Sender: TObject;
  const browser: ICefBrowser; const frame: ICefFrame;
  httpStatusCode: Integer);
begin
 if (frame <> nil) and frame.IsMain  then
 begin
    Memo1.Lines.Add('Загрузка страницы завершена!'); // для вывода в консоль
    frame.GetSourceProc(callback);
  end;
end;
 
procedure callback(const str: ustring);
begin
  Form1.Memo2.Lines.Clear; // очищаем Memo
  Form1.Memo2.Lines.Add(str);
  Form1.Memo2.Lines.Add('------------end-frame--------------');
  Application.ProcessMessages;
end;

Блокируем ресурсы

Допустим мы не хотим видет какую-то рекламу. Как заблокировать загрузку ресурса по адресу? Очень просто:

Повесим обработчик в Chromium на OnBeforeResourceLoad, напишем там такой код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm1.Chromium1BeforeResourceLoad(Sender: TObject;
  const browser: ICefBrowser; const frame: ICefFrame;
  const request: ICefRequest; out Result: Boolean);
var
  url: String;
  pos: Integer;
begin
  Result := False; //по умолчанию разрешаем загрузку ресурса (страницы, изображения, видео...)
  url:=request.GetUrl; //получаем текущий урл
  pos:=PosEx('youtube.com', url); //ищем вхождение слова "youtube.com" в урл
  if pos>0 then //если слово содержиться, то
  begin
    Result := True; //запрещаем его загрузку. Таким образом я избавился от лишнего мусора...
  end
end;

Настройка прокси

Обнаружилась одна неприятная особенность: своего прокси у Chromium нет. Вообще нет и похоже не предвидеться. Глянул браузеры Google Chrome и Opera - все они используют настройки прокси от системы (т.е. IE). Только Mozilla Firefox продолжает использовать собственные настройки. После долгих часов поиска понял, что похоже единственное решение - подмена каким-то образом системных настроек. Но как конкретно это сделать - не нашел, встречал только упоминания. Буду благодарен, если в комментариях оставите ссылки. Ну а сейчас единственный рабочий вариант - это прописывать параметры прокси в командной строке:

1
test.exe --proxy-server=255.255.0.1:80

 

Соотвественно чтобы программно менять прокси - нужно создать две программы - одна вызывает другую с нужными параметрами...

В параметрах командной строки также можно сменить user-agent:

1
test.exe --user-agent="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en)"

Еще исследуются…

 

 

Добавить комментарий


Защитный код
Обновить

Поиск по сайту

Новейшее из новостей

Предыдущая Следующая

Викторина "С легким паром!"

Викторина "С легким паром!" Для тех кто пропустил первые две викторины может принять участие в последней в этом году викторине. Всего 10 вопросов. Дается 1 попытка. Ответить надо за 15 минут. Викторина будет действовать: с...

Admin - avatar Admin 25 Дек 2017 Просмотров:145 ВИКТОРИНИЯ

Подробнее

Результаты викторины "Новый год" 24 дека…

Результаты викторины

  Новогодние символы Нового года – Дед Мороз, Снегурочка, новогодняя ель, фильм «Ирония судьбы», новогодние подарки. Праздничный стол  с неизменным блюдом праздника салат «Оливье», главный новогодний фрукт – мандарины, а...

Admin - avatar Admin 25 Дек 2017 Просмотров:124 ВИКТОРИНИЯ

Подробнее

24 декабря 2017 года. ВТОРАЯ ВИКТОРИНА! …

24 декабря 2017 года. ВТОРАЯ ВИКТОРИНА! «НОВЫЙ ГОД»   Коротко о главном: Викторина, посвященная НОВОМУ ГОДУ. Надо выполнить 27 заданий за 41 минуту. Максимально можно заработать 50 баллов. Одна попытка. Начало в 800, 24 декабря 2017 года (любой желающий ...

Admin - avatar Admin 18 Дек 2017 Просмотров:121 ВИКТОРИНИЯ

Подробнее

Семь золотых правил по поддержке диска +…

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

Admin - avatar Admin 12 Дек 2017 Просмотров:290 КОМПЬЮТЕРы

Подробнее

Выбираем объектив к камере видеонаблюден…

Выбираем объектив к камере видеонаблюдения. Основная дилемма при выборе камеры для системы видеонаблюдения, это фокусное расстояние линзы, именно от него зависит то, что Вы в итоге увидите. С одной стороны человеку...

Admin - avatar Admin 10 Дек 2017 Просмотров:117 КОМПЬЮТЕРы

Подробнее

Дипломы и сертификаты участникам игры-ви…

РЕЗУЛЬТАТЫ ВИКТОРИНЫ Дипломы и сертификаты участникам игры-викторины посвященное Дню ИНФОРМАТИКИ! (4 декабря 2017г.) 1. Алёна Фролова 96% - Диплом I степени2. Роберт Исхаков 94% - Диплом II степени3. Костя Кузнецов 92% - Диплом III степени4. Анна Калинкина 92%...

Admin - avatar Admin 05 Дек 2017 Просмотров:90 ВИКТОРИНИЯ

Подробнее

Авторизация

Школьное расписание


Рейтинг@Mail.ru Яндекс.Метрика Рейтинг@Mail.ru