Como abrir um link em Python. Trabalhando com o WebBrowser e resolvendo um problema com o Internet Explorer

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:
Digite o nomeNome da classe
'mozilla'Mozilla ('mozilla')
'firefox'Mozilla ('mozilla')
'netscape'Mozilla ('netscape')
'galeon'Galeon ('galeon')
'epifania' 'Galeon ('epifania')
'skipstone'BackgroundBrowser ('skipstone')
'kfmclient'Konqueror ()
'konqueror' 'Konqueror ()
'kfm'Konqueror ()
'mosaico'BackgroundBrowser ('mosaico')
'ópera'Opera ()
'graal'Graal ()
'links'Navegador genérico ('links')
'elinks'Elinks ('elinks')
'lince'Navegador genérico ('lynx')
'w3m'Navegador genérico ('w3m')
'windows-default'Windowsdefault
'macosx'MacOSX ('padrão')
'safari'MacOSX ('safari')
'google-chrome'Chrome ('google-chrome')
'chrome' 'Chrome ('chrome')
'cromo' 'Crómio («crómio»)
'navegador de cromo'Crómio («navegador de crómio»)

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:

  1. Site vk.com
  2. 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


  1. Fazemos uma consulta de pesquisa em nosso mecanismo de pesquisa (Yandex, Google etc. etc.)
  2. Nós obtemos o link

  3. 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=') 
  4. 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.

Source: https://habr.com/ru/post/pt470938/


All Articles