Как сделать свой браузер на основе chromium python

Обновлено: 08.07.2024

Модуль webbrowser обеспечивает интерфейс высокого уровня, позволяющий пользователям просматривать веб-документы. В большинстве случаев, простой вызов функции open() из этого модуля сделает все правильно.

В Unix графические браузеры предпочтительны в разделе X11, но текстовые браузеры будут используемый, если графические браузеры недоступны или X11 дисплей недоступен. При используемый браузеров в текстовом режиме вызывающий процесс блокируется до тех пор, пока пользователь не выйдет из браузера.

Если переменная среды BROWSER существует, она интерпретируется как os.pathsep -separated список браузеров, чтобы попытаться опередить настройки платформы по умолчанию. Если значение части списка содержит строка %s , то она интерпретируется как командная строка браузера литерал для используемый с URL-адресом аргумента, заменяющим %s ; если деталь не содержит %s , она просто интерпретируется как имя запускаемого браузера. [1]

Для платформ, отличных от Unix, или когда удаленный браузер доступен в Unix, процесс управления не будет ждать, пока пользователь закончит работу с браузером, а позволит удаленному браузеру поддерживать собственные окна на дисплее. Если удаленные браузеры недоступны в Unix, процесс управления запустит новый браузер и будет ждать.

Скрипт webbrowser может быть используемый в качестве интерфейса командной строки для модуля. В качестве аргумента он принимает URL-адрес. Он принимает следующие необязательные параметры: -n по возможности открывает URL-адрес в новом окне браузера; -t открывает URL-адрес на новой странице браузера («tab»). Варианты, естественно, взаимоисключающие. Пример использования:

Определено следующее исключение:

exception webbrowser. Error ¶

Исключение возникает при возникновении ошибки управления браузером.

Определены следующие функции:

webbrowser. open ( url, new=0, autoraise=True ) ¶

Отображение url с помощью браузера по умолчанию. Если new равно 0, по возможности url открывается в том же окне браузера. Если new равно 1, по возможности открывается новое окно браузера. Если new равно 2, по возможности открывается новая страница браузера («tab»). Если autoraise True , окно поднимается по возможности (обратите внимание, что во многих оконных менеджерах это происходит независимо от настройки этой переменной).

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

Поднимает событие аудита webbrowser.open с аргументом url .

webbrowser. open_new ( url ) ¶

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

webbrowser. open_new_tab ( url ) ¶

Открыть url на новой странице («tab») браузера по умолчанию, если это возможно, в противном случае эквивалентно open_new() .

webbrowser. get ( using=None ) ¶

Возвращает объект контроллера для using типа браузера. Если using None , возвращает контроллер для браузера по умолчанию, соответствующего среде вызывающего абонента.

webbrowser. register ( name, constructor, instance=None, *, preferred=False ) ¶

Зарегистрировать тип браузера name. После регистрации типа браузера функция get() может возвращает контроллер для этого типа браузера. Если instance не предоставляется или является None , constructor вызывается без параметров для создания сущность при необходимости. Если instance предоставляется, constructor никогда не будет вызываться и может быть None .

Установка preferred в значение True делает этот браузер предпочтительным результатом для вызова get() без аргумента. В противном случае эта точка входа полезна только в том случае, если планируется задать переменную BROWSER или вызвать get() с непустым аргументом, соответствующим имени объявленного обработчик.

Изменено в версии 3.7: preferred ключевой-только параметр был добавлен.

Предопределен ряд типов браузера. В этой таблице приведены имена типов, которые могут быть переданы функции get() , и соответствующие экземпляры для классов контроллеров, все из которых определены в этом модуле.

  1. «Konqueror» является файловым менеджером для среды рабочего стола KDE для Unix и имеет смысл использовать только при работе KDE. Какой-то способ надежного обнаружения KDE был бы хорошим; KDEDIR переменной недостаточно. Следует также отметить, что имя «kfm» используемый даже при использовании команды konqueror с KDE 2 — реализации выбирается оптимальная стратегия для запуска Konqueror.
  2. Только на платформах Windows.
  3. Только на платформе Mac OS X.

Добавлено в версии 3.3: Добавлена поддержка Chrome/Chromium.

Вот несколько простых примеров:

Объекты контроллера браузера¶

Контроллеры браузера предоставляют следующие методы, которые параллельны трем функциям удобства на уровне модулей:

controller. open ( url, new=0, autoraise=True ) ¶

Отображение url с помощью браузера, обрабатываемого этим контроллером. Если new равно 1, по возможности открывается новое окно браузера. Если new равно 2, по возможности открывается новая страница браузера («tab»).

controller. open_new ( url ) ¶

Открыть url в новом окне браузера, обработанном этим контроллером, если это возможно, в противном случае открыть url в единственном окне браузера. Псевдоним open_new() .

controller. open_new_tab ( url ) ¶

Открыть url на новой странице («tab») браузера, обрабатываемой этим контроллером, если это возможно, в противном случае эквивалентно open_new() .


Большинство людей привыкли, что Chromium — это и браузер, и основа для других браузеров. До недавнего времени я тоже так думал, но, изучая эту тему уже пару месяцев, я начал открывать другой дивный мир. Chromium — это огромная экосистема, в которой есть всё: и система зависимостей, и система кроссплатформенной сборки, и компоненты почти на все случаи жизни. Так почему же не попробовать создавать свои приложения, используя всю эту мощь?

Под катом небольшое руководство, как начать это делать.

Подготовка окружения

В статье я буду использовать Ubuntu 18.04, порядок действий для других ОС можно посмотреть в документации:

Установка depot_tools

depot_tools — это набор инструментов для разработки Chromium. Для его установки необходимо выполнить:


И добавить путь в переменную окружения PATH:


Важно: если depot_tools были скачаны в домашнюю папку, то не используйте

в переменной PATH , иначе могут возникнуть проблемы. Необходимо использовать переменную $HOME :

Получение кода

Для начала надо создать папку для исходников. Например, в домашней директории (необходимо около 30 Гб свободного места):


После этого можно скачать исходники с помощью утилиты fetch из depot_tools :


Теперь можно пойти попить чай/кофе, так как процедура небыстрая. Для экспериментов история не нужна, поэтому используется флаг --no-history . С историей будет ещё дольше.

Установка зависимостей

Все исходники лежат в папке src , идём в неё:


Теперь нужно поставить все зависимости с помощью скрипта:


И запустить хуки:


На этом подготовка окружения завершена.

Система сборки

В качестве основной системы сборки Chromium используется Ninja, а утилита GN применяется для генерирования .ninja -файлов.

Чтобы понять, как пользоваться этими инструментами, предлагаю создать тестовую утилиту example. Для этого в папке src надо создать подпапку example :


Затем в папке src/example надо создать файл BUILD.gn , который содержит:


BUILD.gn состоит из цели (исполняемого файла example ) и списка файлов, которые необходимы для сборки цели.

Следующим шагом надо создать сам файл example.cc . Для начала предлагаю сделать классическое приложение «Hello world»:


Исходный код можно найти на GitHub.

Чтобы GN узнала о новом проекте, нужно в файле BUILD.gn , который находится в src , в разделе deps добавить строку "//example" :


Теперь необходимо вернуться в папку src и сгенерировать проект с помощью команды:


GN также позволяет подготовить проект для одной из поддерживаемых IDE:

  • eclipse
  • vs
  • vs2013
  • vs2015
  • vs2017
  • vs2019
  • xcode
  • qtcreator
  • json


Например, для работы с проектом example в QtCreator надо выполнить команду:


После этого можно открыть проект в QtCreator:


Финальный шаг — сборка проекта с помощью Ninja:


На этом краткое ознакомление с системой сборки можно завершить.

Приложение можно запустить с помощью команды:


И увидеть Hello world. На самом деле, про систему сборки в Chromium можно написать отдельную статью. Возможно, и не одну.

Работа с командной строкой

В качестве первого примера использования кодовой базы Chromium как фреймворка предлагаю поиграться с командной строкой.

Задача: вывести на экран все аргументы, переданные приложению в стиле Chromium.
Для работы с командной строкой необходимо в example.cc подключить заголовочный файл:


А также надо не забыть в BUILD.gn добавить зависимость от проекта base . BUILD.gn должен выглядеть так:


Теперь всё необходимое будет подключено к example .

Для работы с командной строкой Chromium предоставляет синглтон base::CommandLine . Чтобы получить ссылку на него, надо использовать статический метод base::CommandLine::ForCurrentProcess , но сначала надо его инициализировать с помощью метода base::CommandLine::Init :


Все аргументы, переданные приложению в командной строке и начинающиеся с символа - возвращаются в виде base::SwitchMap (по сути, map<string, string> ) с помощью метода GetSwitches . Все остальные аргументы возвращаются в виде base::StringVector (по сути, vectоr<striпg> ). Этих знаний достаточно, чтобы реализовать код для задачи:


Полную версию можно найти на GitHub.

Чтобы собрать и запустить приложение надо выполнить:


На экран будет выведено:

Работа с сетью

В качестве второго и последнего на сегодня примера предлагаю поработать с сетевой частью Chromium.

Задача: вывести на экран содержимое URL'а, переданного в качестве аргумента.

Сетевая подсистема Chromium


Полную версию можно посмотреть в документации.

Для создания URLRequest 'а необходимо использовать URLRequestContext . Создание контекста — довольно сложная операция, поэтому рекомендуется использовать URLRequestContextBuilder . Он проинициализирует все необходимые переменные значениями по умолчанию, но, при желании, их можно поменять на свои, например:

Многопоточность

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

Реализация

Некоторые компоненты Chromium требуют наличия base::AtExitManager — это класс, позволяющий зарегистрировать операции, которые надо выполнить при завершении приложения. Использовать его очень просто, необходимо в стеке создать объект:


Дальше нужно с помощью Context builder 'а создать Context :


Чтобы послать запрос, необходимо с помощью метода CreateRequest объекта ctx создать объект URLRequest . В качестве параметров передаются:

  • URL, строка с типом GURL;
  • приоритет;
  • делегат, который обрабатывает события.


Вся основная логика находится в обработчике события OnResponseStarted : содержимое ответа вычитывается, пока не произойдёт ошибка или будет нечего читать. Так как после чтения ответа нужно завершить приложение, то делегат должен иметь доступ к функции, которая прервёт основной Run loop , в данном случае используется callback типа base::Closure .

Теперь всё готово для отправки запроса:


Чтобы запрос начал обрабатываться, надо запустить Run loop :


Полную версию можно найти на GitHub.

Чтобы собрать и запустить приложение нужно выполнить:

Финал

На самом деле, в Chromium можно найти много полезных кубиков и кирпичиков, из которых можно строить приложения. Он постоянно развивается, что, с одной стороны, является плюсом, а с другой стороны, регулярные изменения API не дают расслабиться. Например, в последнем релизе base::TaskScheduler превратился в base::ThreadPool , к счастью, без изменения API.

Задумывались ли вы когда-нибудь о создании собственного браузера? На самом деле попробовать себя в разработке программного обеспечения довольно легко, и для этого даже не потребуется больших знаний в программировании. Сегодня мы попробуем сделать первый шаг на пути к становлению гуру разработки. Возможно вас заинтересует этот процесс, и вы захотите углубиться сильнее.

Установка и обновления

Для начала вам необходимо скачать и установить Visual Studio Community Edition от Microsoft, который к слову абсолютно бесплатен. Эта среда разработки может показаться вам довольно громоздкой, но она содержит множество готовых шаблонов, в том числе и веб браузер, который нам так необходим.

Создаем собственный веб браузер

После развертывания всех необходимых компонентов, Visual Studio запустится автоматически. Первым делом вам предложат подключиться к различным службам для разработчиков, но в нашем случае такой необходимости нет. Выбираем пункт Не сейчас! Возможно, позже , выбираем понравившуюся тему оформления и наконец запускаем Visual Studio.

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

Создание элементов меню

Для создания элементов управления нам нужно снова воспользоваться Панелью элементов . Найдите там элемент Button и перетащите в верхнюю часть окна. Всего нам понадобиться 5 кнопок. Их цвет и форму можно будет изменить позже, в разделе свойства. Также нам нужна строка адреса – перетащите их из панели элементов TextBox в нашу форму.

Расставьте кнопки и текстовое поле так, как вам будет удобно. Visual Studio позволяет с лёгкостью сделать это симметрично и на одинаковом расстоянии. Сейчас нам необходимо немного изменить размеры содержимого, чтобы элементы управления не перекрывали веб страницу.

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

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

Теперь давайте разберемся со строкой поиска. Для нее значение будет следующим:

Начало здесь ровно такое же, как и раньше – мы просто обращаемся к нашему браузеру. Затем идет функция перейти ( Navigate ) на определенный адрес, у которой в скобках указаны параметры. В качестве параметров у нас опять же элемент тестовая строка с номером 1 ( textBox1 ) и текст из нее ( Text ) от которого мы передаем функции Navigate. Эту же функцию следует задать нашей пятой кнопке. Так мы пусть и повторим действие, зато будем уверены, если что-то пойдет не так, то сможем повторить процесс.

Запускаем наш браузер

Настало время запустить наш браузер. Для этого достаточно нажать кнопку Пуск в меню сверху. Спустя некоторое время вы увидите наш скромный веб обозреватель и сможете открыть в нем любую веб страницу. Если у вас что-то не получилось, то в первую очередь проверьте знак ; в конце строки. Сохраните свой браузер нажав иконку в виде дискеты, в левом верхнем углу и при следующем запуске окружения разработки у вас уже будут все инструменты под рукой.

Заключение

Сегодня мы рассмотрели один из самых простых вариантов применения Microsoft Visual Studio. Если, вам понравилось исследовать разработку программного обеспечения, то попробуйте изучить пособие Microsoft.

Создаете вы свой проект или только готовитесь к этому – просто поделитесь с нами в комментариях. Возможно именно наш скромный браузер вдохновит вас на нечто большее.

Создайте персонализированный браузер с MakeMyBrowser


Теперь добавьте закладки в свой браузер, чтобы пользователи могли легко переходить на ваш сайт и иметь к нему легкий доступ. Вы можете добавлять настраиваемые закладки и даже настраивать домашнюю страницу браузера. Более того, если вы не хотите добавлять закладки вручную, вы можете экспортировать их из своего Google Chrome, который вы в настоящий момент используете.


Выберите подходящую тему для вашего браузера и нажмите «Готово», а затем кнопку «Загрузить».


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


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

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

Обновление: сайт, похоже, был закрыт. Спасибо Дискоданк.

Читайте также: