Executando verificação de segurança...
2

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á.

Carregando publicação patrocinada...