No decorrer do trabalho no uni curser, deparei-me com um módulo Python padrão -
WebBrowser . Por meio deste módulo, eu queria implementar o trabalho do assistente de voz com o navegador padrão, mas tudo não correu tão bem quanto o esperado. Vamos primeiro dizer o que é este módulo e como ele geralmente funciona.
O WebBrowser é um módulo incorporado no Python que fornece uma interface de alto nível para a visualização de documentos da web.
Para começar, importe o módulo com o comando:
import webbrowser
Agora há uma escolha de como abrir o link. Existem duas cadeiras:
1. Escreva em uma linha:
webbrowser.open(url, new=0, autoraise=True)
Por exemplo:
webbrowser.open('https://vk.com', new=2)
Se novo = 0, o URL é aberto, se possível, na mesma janela do navegador. Se a variável new = 1, uma nova janela do navegador será aberta, se possível. Se novo = 2, uma nova página do navegador (“guia”) é aberta, se possível.
Você pode pular com segurança o valor descritoe, pois ele abre o navegador sobre todas as janelas, e os navegadores mais modernos cospem nessa variável, mesmo que seja False.
2. Não se esqueça de lembrar dos novos parâmetros e escreva humanamente:
webbrowser.open_new(url)
Esse design abre o URL em uma nova janela do navegador
padrão , se possível, caso contrário, abre o URL em uma única janela do navegador.
webbrowser.open_new_tab(url)
Nesse caso, o URL será aberto em uma nova página do navegador ("guia") por padrão, se possível, caso contrário, será equivalente a open_new ().
Suponha que você não precise de um navegador padrão. Existe um comando .get () para selecionar um navegador
webbrowser.get(using=None)
Grosso modo, você simplesmente indica qual navegador usa.
Por exemplo, abrindo uma nova guia no Google Chrome:
webbrowser.get(using='google-chrome').open_new_tab('https://vk.com')
Tabela de nomes do navegador:
Mas nem sempre é possível conviver com .get () sozinho e, neste caso, a função .register () vem ao resgate, por exemplo:
import webbrowser webbrowser.register('Chrome', None, webbrowser.BackgroundBrowser('C:\Program Files (x86)\Google\Chrome\Application\chrome.exe')) webbrowser.get('Chrome').open_new_tab('vk.com')
Nós indicamos o caminho para o Google Chrome, o nomeamos e agora todos os links abrem apenas nele. Espero que tenhamos resolvido um pouco o módulo WebBrowser e agora vamos ao meu pequeno problema.
O problema
Como mencionado anteriormente, para o projeto do curso, escolhi criar um assistente de voz. Eu queria ensiná-lo a seguir os links e procurar informações em um mecanismo de pesquisa. Obviamente, seria possível “encher” muitas bibliotecas para isso, mas basicamente eu queria implementar isso através do módulo
WebBrowser padrão.
Como a maioria dos navegadores modernos tem uma linha de entrada de link e uma linha de pesquisa da mesma forma, parece que você pode simplesmente transferir a solicitação para o mesmo local para o qual o link é enviado.
Por exemplo:
import webbrowser webbrowser.open_new_tab('https://vk.com') webbrowser.open_new_tab('')
De acordo com a lógica desse código, duas guias devem ser abertas:
- Site vk.com
- Consulta ao mecanismo de pesquisa - Maçãs
Mas, de fato, dois navegadores diferentes são abertos. O link é aberto pelo navegador padrão e a solicitação é feita pelo Internet Explorer (embora custe o Windows 10, o IE ainda abre em vez do Edge). Como lidar com isso? Gurus de verdade podem entrar no próprio módulo WebBrowser e consertá-lo, mas avaliaremos sobriamente nossas chances e seguiremos o fluxo.
Como temos permissão para abrir apenas links no navegador padrão, abriremos apenas links.
Etapas da solução
- Fazemos uma consulta de pesquisa em nosso mecanismo de pesquisa (Yandex, Google etc. etc.)

- Nós obtemos o link

- E, como muitos já imaginaram, basta inserir nosso link sem o que vem depois de "text ="
import webbrowser webbrowser.open_new_tab('https://vk.com') webbrowser.open_new_tab('https://yandex.ru/search/?lr=10735&text=')
- Agora você precisa adicionar o próprio texto da consulta através de "+" ou "% s"
- Através de "+"
webbrowser.open_new_tab('https://yandex.ru/search/?lr=10735&text='+'')
- Através de "%"
webbrowser.open_new_tab('https://yandex.ru/search/?lr=10735&text=%s'%'')
- Mas é melhor implementar através do formato
webbrowser.open_new_tab('https://yandex.ru/search/?lr=10735&text={}'.format(''))
Agora vamos fazer com que o usuário insira um link ou solicitação, e o próprio programa entenda qual método usar (chame o link ou insira-o no link de solicitação).
Para começar, entendemos que um link carrega um domínio (.ru, .com etc.). Na solicitação, como regra, eles não terminam (compre um carro, um filme on-line etc.), mas no link barra de espaço
Portanto, procuraremos um período e um espaço em que o usuário digitou. Podemos fazer isso graças ao módulo re, que também é nativo no Python. O Python oferece duas operações primitivas diferentes baseadas em expressões regulares:
corresponde à pesquisa de um padrão no início de uma sequência, enquanto a
pesquisa pesquisa a sequência inteira. Usaremos a operação de
busca .
import webbrowser import re call = input(' : ') if re.search(r'\.', call): webbrowser.open_new_tab('https://' + call) elif re.search(r'\ ', call): webbrowser.open_new_tab('https://yandex.ru/search/?text='+call) else: webbrowser.open_new_tab('https://yandex.ru/search/?text=' + call)
Vou explicar um pouco o código.
O usuário insere um link ou solicita texto na variável de chamada.
if re.search(r'\.', call): webbrowser.open_new_tab('https://' + call)
A primeira condição verifica a variável de chamada em busca de um ponto dentro dela. O caractere '\' é necessário, caso contrário, o módulo não entende que o caractere é um ponto antes dele.
elif re.search(r'\ ', call):
Nessa condição, tudo é igual ao primeiro, mas a verificação já está em andamento para um espaço. Um espaço indica que temos uma consulta de pesquisa.
else: webbrowser.open_new_tab('https://yandex.ru/search/?text=' + call)
Além
disso , por sua vez, atribui tudo o que o usuário escreveu sem espaços e pontos na consulta de pesquisa.
É necessário procurar um espaço, caso contrário, o WebBrowser abre o Internet Explorer.
Obrigado a todos pela atenção! Espero que este artigo seja útil para alguém.