Comment ouvrir un lien en Python. Travailler avec WebBrowser et résoudre un problème avec Internet Explorer

Au cours du travail sur le curseur uni, je suis tombé sur un module Python standard - WebBrowser . A travers ce module, j'ai voulu implémenter le travail de l'assistant vocal avec le navigateur par défaut, mais tout ne s'est pas passé aussi bien que prévu. Voyons d'abord ce qu'est ce module et comment il fonctionne généralement.

WebBrowser est un module intégré à Python qui fournit une interface de haut niveau pour afficher des documents Web.

Pour commencer, importez le module avec la commande:

import webbrowser 

Il y a maintenant un choix sur la façon d'ouvrir le lien. Il y a deux chaises:

1. Écrivez en une seule ligne:

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

Par exemple:

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

Si new = 0, l'URL s'ouvre, si possible, dans la même fenêtre de navigateur. Si la variable new = 1, une nouvelle fenêtre de navigateur s'ouvre, si possible. Si nouveau = 2, une nouvelle page de navigateur («onglet») s'ouvre, si possible.

Vous pouvez ignorer la valeur autoraise en toute sécurité, car cela ouvre le navigateur au-dessus de toutes les fenêtres, et la plupart des navigateurs modernes crachent sur cette variable même si elle est fausse.

2. Ne souffrez pas de vous souvenir des nouveaux paramètres et écrivez humainement:

 webbrowser.open_new(url) 

Cette conception ouvre l'URL dans une nouvelle fenêtre de navigateur par défaut , si possible, sinon il ouvre l'URL dans une seule fenêtre de navigateur.

 webbrowser.open_new_tab(url) 

Dans ce cas, l'URL s'ouvrira sur une nouvelle page de navigateur ("tab") par défaut, si possible, sinon équivalent à open_new ().

Supposons que vous n'ayez pas besoin d'un navigateur par défaut. Il y a une commande cool .get () pour sélectionner un navigateur

 webbrowser.get(using=None) 

En gros, vous indiquez simplement le navigateur que vous utilisez.

Par exemple, ouvrir un nouvel onglet dans Google Chrome:

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

Tableau des noms de navigateur:
Tapez le nomNom de classe
«mozilla»Mozilla («mozilla»)
'firefox'Mozilla («mozilla»)
«netscape»Mozilla ('netscape')
«galeon»Galeon («galeon»)
'épiphanie' 'Galeon («épiphanie»)
«skipstone»BackgroundBrowser («skipstone»)
«kfmclient»Konqueror ()
'konqueror' 'Konqueror ()
«kfm»Konqueror ()
«mosaïque»BackgroundBrowser («mosaïque»)
«opéra»Opéra ()
«graal»Graal ()
«liens»GenericBrowser («liens»)
«elinks»Elinks («elinks»)
«lynx»GenericBrowser ('lynx')
«w3m»GenericBrowser ('w3m')
'windows-default'Windowsdefault
«macosx»MacOSX ('par défaut')
«safari»MacOSX («safari»)
«google-chrome»Chrome («google-chrome»)
'chrome' 'Chrome («chrome»)
'chrome' 'Chrome («chrome»)
'chrome-browser'Chrome («navigateur chrome»)

Mais il n'est pas toujours possible de se débrouiller avec .get () seul, et dans ce cas la fonction .register () vient à la rescousse, par exemple:

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

Nous avons indiqué le chemin vers Google Chrome, l'avons nommé, et maintenant tous les liens ne s'ouvrent que dans celui-ci. J'espère que nous avons un peu réglé le module WebBrowser et passons maintenant à mon petit problème.

Le problème


Comme mentionné précédemment, pour le projet de cours, j'ai choisi de créer un assistant vocal. Je voulais lui apprendre à suivre les liens et à rechercher des informations dans un moteur de recherche. Bien sûr, il serait possible de «bourrer» beaucoup de bibliothèques pour cela, mais en gros, je voulais l'implémenter via le module WebBrowser standard.

Étant donné que la plupart des navigateurs modernes ont une ligne d'entrée de lien et une ligne de recherche de la même chose, il semblerait que vous pouvez simplement transférer la demande au même endroit où le lien est envoyé.

Par exemple:

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

Selon la logique de ce code, deux onglets devraient s'ouvrir:

  1. Site Web vk.com
  2. Requête de moteur de recherche - Pommes

Mais en fait, deux navigateurs différents s'ouvrent. Le lien est ouvert par notre navigateur par défaut, et la demande est faite par Internet Explorer (bien que cela coûte Windows 10, IE s'ouvre toujours à la place d'Edge). Comment y faire face? Les vrais gourous peuvent entrer dans le module WebBrowser et y remédier, mais nous évaluerons sobrement nos chances et suivrons le flux.

Étant donné que nous ne pouvons ouvrir que des liens dans le navigateur par défaut, nous n'ouvrirons que des liens.

Étapes de la solution


  1. Nous effectuons une requête de recherche dans notre moteur de recherche (Yandex, Google, etc., etc.)
  2. Nous obtenons le lien

  3. Et, comme beaucoup l'ont déjà deviné, il suffit d'insérer notre lien sans ce qui vient après "text ="

     import webbrowser webbrowser.open_new_tab('https://vk.com') webbrowser.open_new_tab('https://yandex.ru/search/?lr=10735&text=') 
  4. Vous devez maintenant ajouter le texte de la requête lui-même via "+" ou via "% s"

    • Par "+"

       webbrowser.open_new_tab('https://yandex.ru/search/?lr=10735&text='+'') 
    • Par "%"

       webbrowser.open_new_tab('https://yandex.ru/search/?lr=10735&text=%s'%'') 
    • Mais il vaut mieux l'implémenter via le format

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


Faisons maintenant l'utilisateur entrer un lien ou une demande, et le programme lui-même comprend la méthode à utiliser (appelez le lien ou insérez-le dans le lien de demande).

Pour commencer, nous comprenons qu'un lien porte un domaine (.ru, .com, etc.), dans la demande, en règle générale, ils ne mettent pas fin à (acheter une voiture, un film en ligne, etc.), mais dans le lien barre d'espace

Par conséquent, nous chercherons une période et un espace dans ce que l'utilisateur a entré. Nous pouvons le faire grâce au module re, qui est également nativement intégré à Python. Python propose deux opérations basées sur des expressions régulières primitives différentes: match recherche un modèle au début d'une chaîne, tandis que la recherche recherche la chaîne entière. Nous utiliserons l'opération de recherche .

 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) 

Je vais expliquer un peu le code.

L'utilisateur entre un lien ou un texte de demande dans la variable d'appel.

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

La première condition vérifie la variable d'appel pour un point à l'intérieur. Le caractère «\» est requis, sinon le module ne comprend pas que le caractère est un point devant lui.

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

Dans cet état, tout est le même que dans le premier, mais la vérification est déjà en cours pour un espace. Un espace indique que nous avons une requête de recherche.

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

Et sinon , à son tour, attribue tout ce que l'utilisateur a écrit sans espaces ni points dans la requête de recherche.

Il est nécessaire de rechercher un espace, sinon WebBrowser ouvre Internet Explorer.

Merci à tous pour votre attention! J'espère que cet article sera utile à quelqu'un.

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


All Articles