Часто в интернете можно найти аналоги платного бесплатно.Ярким примером тому может быть Lazarus .
Бесплатная среда программирования на замену старшему собрату Delphi 7
Для создания приложений мы восползуемсяGeckoPort
Chromium Embedded Framework (CEF)
Решил использовать второй. Скачать его можно тут. Следует обратить на версию СEF с которой будет работать данный компонент. На момент написания статьи это была версия 3.2454 это позволит потом избежать некоторых ошибок.
cef github
В о общем скачиваем исходники компонента. Распаковываем архив в какую либо папку. Я для это создал папку на диске С c:\lcl , и распаковал туда архив с исходником. Затем открываем Lazarus и выбираем пункт меню Пакет - Открыть файл пакета (.lpk)
lazarus memu packet
В появившемся диалоге выбора файла переходим в каталог куда у вас распакован код компонента и выбираем cef.lpk.
cef lpk
Появится окно установки пакета. В нем нажимаем сначала кнопку Компилировать, а затем выбираем Использовать - Установить.
cef packet install
Появится окно с предложение пересобрать среду разработки.
ide build
Нажимаем Да и наблюдаем процесс компилирования разработки.
После этого на палитре компонентов появляется вкладка Chromium.
panel components
Теперь идем сюда и переходив в раздел Branch 2454 и скачиваем Test App для windows 32, если у вас другая версия операционной системы и среды Lazarus, то скачиваете под свою версию.
cef git branch
Это набор библиотек необходимый для функционирования нашего браузера. Его содержимое необходимо скопировать в папку, куда у вас будет компилировать ваше приложение.
Теперь создаем новое приложение. У меня получилось такое.
lazarus webbrowser
Я добавил на форму компонент TСhromium, пару кнопок, и pagetab с двумя страницами. На одной разместил TСhromium, а на второй разместил TSynEdit (компонент с подсветкой синтаксиса), где будет отображаться исходный код страницы. А дальше написал не много кода для работы. Да и еще что бы все работа в раздел uses добавьте следующие юниты.
?
1
2
3
uses
...... cef3lcl, cef3lib, cef3types,
cef3intf, cef3own, gettext, cef3gui, cef3ref, cef3api;
А теперь по работе с компонентом.
Код загрузки страницы.
?
1
2
3
4
procedure TForm1.btnGoClick(Sender: TObject);
begin
Chromium.Load(edurl.Text);
end;
Если требуется использовать при работе Cookie файлы то код немного видоизменяется.
?
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.btnGoClick(Sender: TObject);
var
CookMan: ICefCookieManager;
CookPath: string;
CefBack: ICefCompletionCallback;
begin
CookPath := ExtractFilePath(Application.ExeName) + 'Cookies\octopus'; //задаем путь к "печенькам"
ForceDirectoriesUTF8(CookPath); // если пути нет то создаем его
CookMan := TCefCookieManagerRef.Global(CefBack); // подключаемся с менеджеру печенек
CookMan.SetStoragePath(CookPath, True,CefBack);// устанавливаем пусть к нашему хранилищу
Chromium.Load(edurl.Text); // грузим страницу
end;
После этого если вы допустим войдете на сайт через форму входа и нажмете запомнить на сайте, затем закроете программу и откроете снова то вы автоматически войдет на сайт.
Код получения html исходника страницы. По интернету гуляет кусок кода для работы с Chromium на Delphi,
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure StringVisitor(const str: ustring);
begin
form1.SynEdit1.Text := Utf8ToAnsi(str);
end;
function GetSourceHTML: string;
var
CefStringVisitor: ICefStringVisitor;
begin
CefStringVisitor := TCefFastStringVisitor.Create(StringVisitor);
form1.Chromium.Browser.MainFrame.GetSource(CefStringVisitor);
end;
procedure TForm1.btnSourceClick(Sender: TObject);
begin
GetSourceHTML;
end;
для Lazarus он тоже подойдет. Но при компилирование будет выдаваться ошибка
Error: Wrong number of parameters specified for call to "StringVisitor"
Что бы её убрать в самом начале кода поменяйте директиву
?
1
{$mode objfpc}{$H+}
на
?
1
{$mode Delphi}{$H+}
И все нормально скомпилируется.
Пример получения подстветки кода сайта.
synedit colored
Если требуется отобразить адрес страницы то можно использовать такой код.
?
1
2
3
4
5
procedure TForm1.ChromiumAddressChange(Sender: TObject; const Browser: ICefBrowser;
const Frame: ICefFrame; const url: ustring);
begin
form1.Caption := 'Octopus-[' + url + ']';
end;
Так же меня интересовала работа с проксей у данного компонента, но к сожалению как сделать это из кода я не нашел. Но есть возможность запускать программу с передачей ей команды. Делается это так.
?
1
programma.exe --proxy-server=127.0.0.1:80
Это позволяет соблюдать некую анонимность в сети.
Пример работы через проксю.
work with proxy
Вот такой простой пример по работе с Chromium.