Crie seu próprio Navegador Web usando PyQt5
Introdução
Neste post, vamos explorar a criação de um navegador web simples usando a biblioteca PyQt5. Se você sempre quis entender como os navegadores funcionam por trás das cortinas, este é o lugar certo!
Vamos analisar um código passo a passo e descobrir como construir nosso próprio navegador web.
O Código do navegador
Importando bibliotecas
Para começar, importamos as bibliotecas necessárias para o nosso projeto. sys
nos permitirá acessar os argumentos da linha de comando, enquanto QtCore
, QtWebEngineWidgets
e QtWidgets
são módulos da PyQt5 que contêm as classes necessárias para criar a interface gráfica do navegador.
import sys
from PyQt5.QtCore import *
from PyQt5.QtWebEngineWidgets import *
from PyQt5.QtWidgets import *
Criando a classe principal
Em seguida, definimos uma classe chamada MainWindow que herda da classe QMainWindow
. Nessa classe, criamos uma instância do widget QWebEngineView
chamada browser, que é a janela principal do nosso navegador. Também definimos a URL inicial como "https://duckduckgo.com" (minha preferência. Aqui, pode-se colocar Google, Bing, ou qualquer outro pesquisador de sua preferência), e configuramos o widget browser
como o widget central da janela.
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
# Criação do widget QWebEngineView e definição da URL inicial
self.browser = QWebEngineView()
self.browser.setUrl(QUrl('https://duckduckgo.com'))
self.setCentralWidget(self.browser)
self.showNormal()
Barra de ferramentas
Para tornar a navegação mais fácil, criamos uma barra de ferramentas (QToolBar) chamada navbar. Essa barra de ferramentas será onde colocaremos os botões de navegação e outros recursos úteis.
navbar = QToolBar() # Criação da barra de navegação
self.addToolBar(navbar)
Agora, vamos adicionar alguns botões à barra de navegação. Criamos botões para voltar, avançar, recarregar e retornar à página inicial. Conectamos esses botões aos métodos correspondentes que executam as ações apropriadas quando clicados.
back_btn = QAction('<', self) # Botão de voltar
back_btn.triggered.connect(self.browser.back)
navbar.addAction(back_btn)
forward_btn = QAction('>', self) # Botão de avançar
forward_btn.triggered.connect(self.browser.forward)
navbar.addAction(forward_btn)
reload_btn = QAction('Recarregar', self) # Botão de recarregar
reload_btn.triggered.connect(self.browser.reload)
navbar.addAction(reload_btn)
home_btn = QAction('Home', self) # Botão Home
home_btn.triggered.connect(self.navigate_home)
navbar.addAction(home_btn)
URL bar
Uma barra de URL (QLineEdit) também é adicionada à barra de navegação para que o usuário possa digitar o endereço da página desejada. Conectamos o sinal returnPressed da barra de URL ao método navigate_to_url, que será chamado quando o usuário pressionar Enter.
self.url_bar = QLineEdit() # Barra de URL
self.url_bar.returnPressed.connect(self.navigate_to_url)
navbar.addWidget(self.url_bar)
Para manter a barra de URL atualizada com o URL atual da página, conectamos o sinal urlChanged do widget browser ao método update_url. Isso garantirá que a barra de URL mostre sempre a URL correta. Também adicionamos um botão de pesquisa à barra de navegação para que o usuário possa iniciar a pesquisa ao clicar nele.
self.browser.urlChanged.connect(self.update_url) # Atualiza a URL quando uma nova página é carregada
search_btn = QAction('Pesquisar', self) # Botão de pesquisa
search_btn.triggered.connect(self.navigate_to_url)
navbar.addAction(search_btn)
Funções para a barra de tarefas
Aqui, definimos três métodos importantes. O método navigate_home define a URL inicial do navegador quando o botão "Home" é clicado. O método navigate_to_url obtém o texto da barra de URL e navega para a URL digitada pelo usuário. O método update_url atualiza o texto da barra de URL com o URL atual da página.
def navigate_home(self):
self.browser.setUrl(QUrl('https://duckduckgo.com')) # Define a URL inicial
def navigate_to_url(self): # Navega para a URL digitada
url = self.url_bar.text()
self.browser.setUrl(QUrl(url))
def update_url(self): # Atualiza a barra de URL com o URL atual
self.url_bar.setText(self.browser.url().toString())
Bloco principal onde roda o app
Por fim, temos o bloco de código principal. Verificamos se o arquivo está sendo executado diretamente e, em seguida, criamos uma instância da classe QApplication. Definimos o nome do aplicativo como "Bassani Browser" e criamos uma instância da classe MainWindow. Por fim, iniciamos o loop de eventos do aplicativo chamando app.exec_().
if __name__ == '__main__':
app = QApplication(sys.argv)
QApplication.setApplicationName('Bassani Browser')
window = MainWindow()
app.exec_()
Espero que esteja animado para embarcar nessa jornada de criar seu próprio navegador web com Python e PyQt5! Se você tiver alguma dúvida ou quiser compartilhar suas ideias, não hesite em deixar um comentário abaixo!
Vale ressaltar que esse não é um projeto muito profissional. Ele é, na verdade, bem simples. Entretanto, você consegue usar esse navegador para o básico: ver vídeos, fazer pesquisas simples... E o melhor: para aprender mesmo! A melhor parte disso não é construir algo para substituir navegadores como Chrome, Edge, Opera, Vivaldi ou qualquer outro que você possua no seu computador. A melhor parte aqui, é o aprendizado! Você consegue ter boa ideia do básico de como funciona um navegador por trás das cortinas! Um abraço, e segue o código no meu Github caso tenha interesse de olhar o projeto por lá.