Während der Arbeit am Uni-Cursor stieß ich auf ein Standard-Python-Modul -
WebBrowser . Durch dieses Modul wollte ich die Arbeit des Sprachassistenten mit dem Standardbrowser implementieren, aber alles lief nicht so reibungslos wie erwartet. Lassen Sie uns zunächst sagen, was dieses Modul ist und wie es im Allgemeinen funktioniert.
WebBrowser ist ein in Python eingebettetes Modul, das eine allgemeine Benutzeroberfläche zum Anzeigen von Webdokumenten bietet.
Importieren Sie zunächst das Modul mit dem folgenden Befehl:
import webbrowser
Jetzt haben Sie die Wahl, wie Sie den Link öffnen möchten. Es gibt zwei Stühle:
1. Schreiben Sie in eine Zeile:
webbrowser.open(url, new=0, autoraise=True)
Zum Beispiel:
webbrowser.open('https://vk.com', new=2)
Wenn new = 0, wird die URL nach Möglichkeit im selben Browserfenster geöffnet. Wenn die Variable new = 1 ist, wird nach Möglichkeit ein neues Browserfenster geöffnet. Wenn neu = 2, wird nach Möglichkeit eine neue Browserseite ("Registerkarte") geöffnet.
Sie können den Wert für die automatische Erstellung sicher überspringen, da der Browser über allen Fenstern geöffnet wird und die meisten modernen Browser auf diese Variable spucken, auch wenn sie falsch ist.
2. Leiden Sie nicht daran, sich an die neuen Parameter zu erinnern, und schreiben Sie menschlich:
webbrowser.open_new(url)
Dieses Design öffnet die URL nach Möglichkeit in einem neuen
Standardbrowserfenster , andernfalls wird die URL in einem einzelnen Browserfenster geöffnet.
webbrowser.open_new_tab(url)
In diesem Fall wird die URL nach Möglichkeit standardmäßig auf einer neuen Browserseite ("Tab") geöffnet, andernfalls entspricht sie open_new ().
Angenommen, Sie benötigen keinen Standardbrowser. Es gibt einen coolen Befehl .get (), um einen Browser auszuwählen
webbrowser.get(using=None)
Grob gesagt geben Sie einfach an, welchen Browser Sie verwenden.
Öffnen eines neuen Tabs in Google Chrome:
webbrowser.get(using='google-chrome').open_new_tab('https://vk.com')
Browser-Namenstabelle:
Es ist jedoch nicht immer möglich, nur mit .get () auszukommen, und in diesem Fall hilft die Funktion .register (), zum Beispiel:
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')
Wir haben den Pfad zu Google Chrome angegeben, ihn benannt, und jetzt werden alle Links nur noch darin geöffnet. Ich hoffe, wir haben das WebBrowser-Modul ein wenig aussortiert und gehen nun zu meinem kleinen Problem über.
Das Problem
Wie bereits erwähnt, habe ich für das Kursprojekt einen Sprachassistenten erstellt. Ich wollte ihm beibringen, Links zu folgen und in einer Suchmaschine nach Informationen zu suchen. Natürlich wäre es möglich, viele Bibliotheken dafür zu „stopfen“, aber im Grunde wollte ich dies über das Standard-
WebBrowser- Modul implementieren.
Da die meisten modernen Browser über eine Link-Eingabezeile und eine Suchzeile verfügen, können Sie die Anfrage anscheinend einfach an denselben Ort übertragen, an den der Link gesendet wird.
Zum Beispiel:
import webbrowser webbrowser.open_new_tab('https://vk.com') webbrowser.open_new_tab('')
Gemäß der Logik dieses Codes sollten zwei Registerkarten geöffnet werden:
- Website vk.com
- Suchmaschinenabfrage - Äpfel
Tatsächlich öffnen sich jedoch zwei verschiedene Browser. Der Link wird von unserem Standardbrowser geöffnet und die Anfrage wird von Internet Explorer gestellt (obwohl es Windows 10 kostet, wird der IE weiterhin anstelle von Edge geöffnet). Wie gehe ich damit um? Echte Gurus können in das WebBrowser-Modul eindringen und es dort reparieren, aber wir werden unsere Chancen nüchtern bewerten und mit dem Fluss gehen.
Da wir im Standardbrowser nur Links öffnen dürfen, öffnen wir nur Links.
Lösungsschritte
- Wir stellen eine Suchanfrage in unserer Suchmaschine (Yandex, Google usw. usw.).

- Wir bekommen den Link

- Und, wie viele bereits vermutet haben, fügen Sie einfach unseren Link ein, ohne das, was nach "text =" steht.
import webbrowser webbrowser.open_new_tab('https://vk.com') webbrowser.open_new_tab('https://yandex.ru/search/?lr=10735&text=')
- Jetzt müssen Sie den Abfragetext selbst entweder über "+" oder über "% s" hinzufügen.
- Durch "+"
webbrowser.open_new_tab('https://yandex.ru/search/?lr=10735&text='+'')
- Durch "%"
webbrowser.open_new_tab('https://yandex.ru/search/?lr=10735&text=%s'%'')
- Es ist jedoch besser, durch Format zu implementieren
webbrowser.open_new_tab('https://yandex.ru/search/?lr=10735&text={}'.format(''))
Lassen Sie den Benutzer nun einen Link oder eine Anfrage eingeben, und das Programm selbst versteht, welche Methode verwendet werden soll (rufen Sie den Link auf oder fügen Sie ihn in den Anforderungslink ein).
Zunächst verstehen wir, dass ein Link eine Domain (.ru, .com usw.) enthält. In der Anfrage wird in der Regel kein Ende gesetzt (ein Auto, ein Film online kaufen usw.), sondern der Link Leertaste
Daher suchen wir nach einem Punkt und einem Leerzeichen in dem, was der Benutzer eingegeben hat. Dies können wir dank des Re-Moduls tun, das ebenfalls nativ in Python integriert ist. Python bietet zwei verschiedene primitive Operationen, die auf regulären Ausdrücken basieren:
Übereinstimmungssuche nach einem Muster am Anfang einer Zeichenfolge, während
Suche die gesamte Zeichenfolge durchsucht. Wir werden die
Suchoperation verwenden.
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)
Ich werde den Code ein wenig erklären.
Der Benutzer gibt einen Link oder einen Anforderungstext in die Aufrufvariable ein.
if re.search(r'\.', call): webbrowser.open_new_tab('https://' + call)
Die erste Bedingung überprüft die Aufrufvariable auf einen Punkt darin. Das Zeichen '\' ist erforderlich, andernfalls versteht das Modul nicht, dass das Zeichen ein Punkt davor ist.
elif re.search(r'\ ', call):
In diesem Zustand ist alles das gleiche wie im ersten, aber die Überprüfung für ein Leerzeichen ist bereits im Gange. Ein Leerzeichen zeigt an, dass wir eine Suchabfrage haben.
else: webbrowser.open_new_tab('https://yandex.ru/search/?text=' + call)
Andernfalls wird alles, was der Benutzer geschrieben hat, ohne Leerzeichen und Punkte in der Suchabfrage zugewiesen.
Es ist erforderlich, nach einem Leerzeichen zu suchen. Andernfalls öffnet WebBrowser den Internet Explorer.
Vielen Dank für Ihre Aufmerksamkeit! Ich hoffe, dieser Artikel ist für jemanden nützlich.