Cómo abrir un enlace en Python. Trabajar con WebBrowser y resolver un problema con Internet Explorer

En el curso del trabajo en el uni curser, me encontré con un módulo estándar de Python: WebBrowser . A través de este módulo, quería implementar el trabajo del asistente de voz con el navegador predeterminado, pero no todo salió tan bien como se esperaba. Primero le diremos qué es este módulo y cómo funciona en general.

WebBrowser es un módulo integrado en Python que proporciona una interfaz de alto nivel para ver documentos web.

Para comenzar, importe el módulo con el comando:

import webbrowser 

Ahora hay una opción para abrir el enlace. Hay dos sillas:

1. Escribe en una línea:

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

Por ejemplo:

 webbrowser.open('https://vk.com', new=2) 

Si nuevo = 0, la URL se abre, si es posible, en la misma ventana del navegador. Si la variable new = 1, se abre una nueva ventana del navegador, si es posible. Si nuevo = 2, se abre una nueva página del navegador ("pestaña"), si es posible.

Puede omitir con seguridad el valor de aumento automático, ya que abre el navegador en la parte superior de todas las ventanas y la mayoría de los navegadores modernos escupen esta variable incluso si es False.

2. No sufra de recordar los nuevos parámetros y escriba humanamente:

 webbrowser.open_new(url) 

Este diseño abre la URL en una nueva ventana predeterminada del navegador, si es posible, de lo contrario abre la URL en una sola ventana del navegador.

 webbrowser.open_new_tab(url) 

En este caso, la URL se abrirá en una nueva página del navegador ("pestaña") de forma predeterminada, si es posible, de lo contrario equivale a open_new ().

Supongamos que no necesita un navegador predeterminado. Hay un comando genial .get () para seleccionar un navegador

 webbrowser.get(using=None) 

En términos generales, simplemente indica qué navegador utiliza.

Por ejemplo, abrir una nueva pestaña en Google Chrome:

 webbrowser.get(using='google-chrome').open_new_tab('https://vk.com') 

Tabla de nombres del navegador:
Nombre del tipoNombre de la clase
'mozilla'Mozilla ('mozilla')
'firefox'Mozilla ('mozilla')
'netscape'Mozilla ('netscape')
galeonGaleon ('galeon')
epifaníaGaleón ('epifanía')
'skipstone'BackgroundBrowser ('skipstone')
'kfmclient'Konqueror ()
'konqueror'Konqueror ()
'kfm'Konqueror ()
mosaicoBackgroundBrowser ('mosaico')
'ópera'Opera ()
'grial'Grial ()
'enlaces'GenericBrowser ('enlaces')
'elinks'Elinks ('elinks')
'lince'GenericBrowser ('lynx')
'w3m'GenericBrowser ('w3m')
'windows-default'Windows predeterminado
'macosx'MacOSX ('predeterminado')
safariMacOSX ('safari')
'google-chrome'Chrome ('google-chrome')
'cromo'Cromo ('cromo')
'cromo'Cromo ('cromo')
'navegador de cromo'Chromium ('navegador de cromo')

Pero no siempre es posible sobrevivir solo con .get () y en este caso la función .register () viene al rescate, por ejemplo:

 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') 

Indicamos la ruta a Google Chrome, lo nombramos y ahora todos los enlaces se abren solo en él. Espero haber resuelto un poco el módulo WebBrowser y ahora pasemos a mi pequeño problema.

El problema


Como se mencionó anteriormente, para el proyecto del curso, elegí crear un asistente de voz. Quería enseñarle a seguir enlaces y buscar información en un motor de búsqueda. Por supuesto, sería posible "rellenar" muchas bibliotecas para esto, pero básicamente quería implementar esto a través del módulo estándar WebBrowser .

Como la mayoría de los navegadores modernos tienen una línea de entrada de enlace y una línea de búsqueda, parece que simplemente puede transferir la solicitud al mismo lugar al que se envía el enlace.

Por ejemplo:

 import webbrowser webbrowser.open_new_tab('https://vk.com') webbrowser.open_new_tab('') 

Según la lógica de este código, deberían abrirse dos pestañas:

  1. Sitio web vk.com
  2. Consulta en buscadores - Manzanas

Pero, de hecho, se abren dos navegadores diferentes. Nuestro navegador predeterminado abre el enlace y Internet Explorer realiza la solicitud (aunque cuesta Windows 10, IE todavía se abre en lugar de Edge). ¿Cómo lidiar con esto? Los verdaderos gurús pueden ingresar al módulo WebBrowser y arreglarlo allí, pero evaluaremos sobriamente nuestras posibilidades e iremos con la corriente.

Como solo podemos abrir enlaces en el navegador predeterminado, solo abriremos enlaces.

Pasos de la solución


  1. Hacemos una consulta de búsqueda en nuestro motor de búsqueda (Yandex, Google, etc., etc.)
  2. Obtenemos el enlace

  3. Y, como muchos ya lo han adivinado, simplemente inserte nuestro enlace sin lo que viene después de "text ="

     import webbrowser webbrowser.open_new_tab('https://vk.com') webbrowser.open_new_tab('https://yandex.ru/search/?lr=10735&text=') 
  4. Ahora necesita agregar el texto de la consulta a través de "+" o "% s"

    • A través de "+"

       webbrowser.open_new_tab('https://yandex.ru/search/?lr=10735&text='+'') 
    • A través de "%"

       webbrowser.open_new_tab('https://yandex.ru/search/?lr=10735&text=%s'%'') 
    • Pero es mejor implementar a través del formato

       webbrowser.open_new_tab('https://yandex.ru/search/?lr=10735&text={}'.format('')) 


Ahora hagamos que el usuario ingrese un enlace o solicitud, y el programa mismo comprende qué método usar (llame al enlace o insértelo en el enlace de solicitud).

Para empezar, entendemos que un enlace lleva un dominio (.ru, .com, etc.), en la solicitud, por regla general, no ponen fin a (comprar un automóvil, una película en línea, etc.), sino en el enlace barra espaciadora

Por lo tanto, buscaremos un período y un espacio en lo que ingresó el usuario. Podemos hacer esto gracias al módulo re, que también está integrado de forma nativa en Python. Python ofrece dos operaciones primitivas diferentes basadas en expresiones regulares: la búsqueda de coincidencias para un patrón al comienzo de una cadena, mientras que la búsqueda busca en toda la cadena. Utilizaremos la operación de búsqueda .

 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) 

Explicaré un poco el código.

El usuario ingresa un enlace o texto de solicitud en la variable de llamada.

 if re.search(r'\.', call): webbrowser.open_new_tab('https://' + call) 

La primera condición verifica la variable de llamada para un punto dentro de ella. Se requiere el carácter '\'; de lo contrario, el módulo no comprende que el carácter es un punto antes.

 elif re.search(r'\ ', call): 

En esta condición, todo es igual que en el primero, pero la verificación ya está en marcha para un espacio. Un espacio indica que tenemos una consulta de búsqueda.

 else: webbrowser.open_new_tab('https://yandex.ru/search/?text=' + call) 

Y, a su vez, asigna todo lo que el usuario escribió sin espacios ni puntos en la consulta de búsqueda.

Se requiere verificar un espacio; de lo contrario, WebBrowser abre Internet Explorer.

¡Gracias a todos por su atención! Espero que este artículo sea útil para alguien.

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


All Articles