ubuntuusers.de

MyBrowse - ein simpler Webkitbrowser in Python

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

tuxifreund Team-Icon

Projektleitung

Anmeldungsdatum:
7. November 2020

Beiträge: 1175

Hallo,

Da ich mich aktuell damit beschäftige mein System so schlank wie möglich zu gestalten, kam ich auch nicht darum mir Alternativen für Firefox anzuschauen.Lariza wäre für mich fast perfekt gewesen.

Da ich aber Zeit hatte, habe ich beschlossen mir einen eigenen WebKit-Browser in Python zu programmieren. Leider waren viele Beispiele noch für Python2 und ich konnte damit nich viel anfangen. Aus einer Mischung von Beispielen und meinen Pythonkenntnissen bekann ich vor drei Tagen MyBrowse zu entwickeln. Viel ist aktuell noch ähnlich zu Beispielen, die ich fand, aber das wird sich verwachsen... 😉

Die Installation gestaltet sich wie folgt:

sudo apt-add-repository ppa:tuxifreund/mybrowse
sudo apt-get install mybrowse
Alternativ kann man sich den Browser auch von Github herunterladen.

Über Feedback würde ich mich freuen. Meine TODO-Liste ist bisher:

  • Tabs

  • der Adressleiste beibringen, dass sie sich bei Links entsprechend anpasst

  • Fortschrittbalken in der Adressleiste

  • mehr Konfigurationsmöglichkeiten (u.a. für JavaScript)

  • Download-Manager

  • Lesezeichen

  • Chronik

  • Tastenkombinationen

Ich werde MyBrowse wahrscheinlich die nächsten Tage als DEB-Paket packen oder in ein PPA hochladen.

LG

tuxifreund

Bearbeitet von ChickenLipsRfun2eat:

PPA-Installation eingefügt.

Bilder

kim88

Avatar von kim88

Anmeldungsdatum:
7. Juni 2007

Beiträge: 357

Wohnort: Schweiz

Ich kann den Browser leider nicht ausführen:

Siehe Fehler im angehängten Screenshot.

Bilder

Axel-Erfurt

Anmeldungsdatum:
18. Mai 2016

Beiträge: 1347

vielleicht noch automatisch den Fenstertitel setzen.

1
self.view.connect("notify::title", self.change_title)
1
2
3
    def change_title(self, widget, data, *arg):
        title = widget.get_title()
        self.set_title(title)

Viele Beispiele findest Du auch hier.

https://athenajc.gitbooks.io/python-gtk-3-api/content/

conf_dir = '~/.config/mybrowse/' 

ist keine gute Idee, verwende lieber os.path.expanduser('~')

1
conf_dir = f"{os.path.expanduser('~')}/.config/mybrowse/"

~/ funktioniert in der shell, in python nicht.

tuxifreund Team-Icon

Projektleitung
(Themenstarter)

Anmeldungsdatum:
7. November 2020

Beiträge: 1175

Hallo,

kim88 schrieb:

Ich kann den Browser leider nicht ausführen:

das ist jetzt behoben (wie konnte ich das selber beim Testen eigentlich nicht merken...?) und hing mit dem von Axel-Erfurt angesprochenen Pfad in das Homeverzeichnis zusammen. Es funktioniert jetzt aber.

Danke für den Hinweis!

Axel-Erfurt schrieb:

vielleicht noch automatisch den Fenstertitel setzen.

Dem nehme ich mich dann unter der Woche an.

LG

tuxifreund

gerold123

Avatar von gerold123

Anmeldungsdatum:
18. April 2006

Beiträge: 1320

Wohnort: /Wild/Eastern/Europe

tuxifreund schrieb:

Es funktioniert jetzt aber.

dazu ein kleines Feedback:

tuxracer@tuxracer-HP-Laptop-17-ca1xxx:~$ wget https://raw.githubusercontent.com/KaiserBarbarossa/MyBrowse/master/install.sh
--2021-02-08 09:04:55--  https://raw.githubusercontent.com/KaiserBarbarossa/MyBrowse/master/install.sh
Auflösen des Hostnamens raw.githubusercontent.com (raw.githubusercontent.com) … 151.101.112.133
Verbindungsaufbau zu raw.githubusercontent.com (raw.githubusercontent.com)|151.101.112.133|:443 … verbunden.
HTTP-Anforderung gesendet, auf Antwort wird gewartet … 200 OK
Länge: 215 [text/plain]
Wird in »install.sh« gespeichert.

install.sh                100%[==================================>]     215  --.-KB/s    in 0s      

2021-02-08 09:04:56 (3,46 MB/s) - »install.sh« gespeichert [215/215]

tuxracer@tuxracer-HP-Laptop-17-ca1xxx:~$ chmod +x install.sh
tuxracer@tuxracer-HP-Laptop-17-ca1xxx:~$ ./install.sh
Klone nach 'MyBrowse' ...
remote: Enumerating objects: 11, done.
remote: Counting objects: 100% (11/11), done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 11 (delta 3), reused 10 (delta 2), pack-reused 0
Entpacke Objekte: 100% (11/11), Fertig.
[sudo] Passwort für tuxracer: 
tuxracer@tuxracer-HP-Laptop-17-ca1xxx:~$ mybrowse.py 

der Adressleiste beibringen, dass sie sich bei Links entsprechend anpasst:

mybrowse.py https://searchx.mobi/

gleich, siehe Anhang.

Danke && 👍

Tante Edit:

tuxracer@tuxracer-HP-Laptop-17-ca1xxx:~$ mybrowse.py 
Failed to launch /usr/lib/x86_64-linux-gnu/webkit2gtk-4.0/WebKitPluginProcess: Kindprozess »/usr/lib/x86_64-linux-gnu/webkit2gtk-4.0/WebKitPluginProcess« konnte nicht ausgeführt werden (Datei oder Verzeichnis nicht gefunden)

noch ein edit (sorry)

tuxracer@tuxracer-HP-Laptop-17-ca1xxx:~$ cat /home/tuxracer/.config/mybrowse/mybrowse.cfg
[General]
#neue Startseite# 
home = https://searchx.mobi/
Bilder

tuxifreund Team-Icon

Projektleitung
(Themenstarter)

Anmeldungsdatum:
7. November 2020

Beiträge: 1175

Hallo gerold123,

durch die Edits ist das jetzt für mich ein bisschen verworren, aber ich hoffe, dass ich weiß, was Du meinst.

gerold123 schrieb:

tuxifreund schrieb:

der Adressleiste beibringen, dass sie sich bei Links entsprechend anpasst:

mybrowse.py https://searchx.mobi/

Mit meinem Beitrag meinte ich, dass sich der Eintrag in der Adressleiste automatisch anpassen soll, wenn ich einen Link anklicke, dass geschieht aktuell nämlich noch nicht. Das von dir beobachtete Verhalten, hatte ich auch beobachtet, es hatte für mich aber keine hohe Priorität. Das Kommandozeilenargument lies sich aber erstaunlich einfach einbauen und MyBrowse unterstützt das jetzt (die Implementierung geht wahrscheinlich deutlich schöner, daas müsste ich mir nochmal anschauen). Bei dem Befehl müsste sich jetzt also (bei einer erneuten Installation vorher) die Adresse https://searx.mobi in MyBrowse öffnen.

Danke && 👍

Vielen Dank für die Blumen ☺

tuxracer@tuxracer-HP-Laptop-17-ca1xxx:~$ mybrowse.py 
Failed to launch /usr/lib/x86_64-linux-gnu/webkit2gtk-4.0/WebKitPluginProcess: Kindprozess »/usr/lib/x86_64-linux-gnu/webkit2gtk-4.0/WebKitPluginProcess« konnte nicht ausgeführt werden (Datei oder Verzeichnis nicht gefunden)

Komischer Fehler. Die Datei gehört zum Paket libwebkit2gtk-4.0-37 ist jedoch nicht in focal-updates sondern nur in focal enthalten. Bei mir ist die Datei auf dem System auch nicht vorhanden, aber der Browser läuft ohne Fehlermeldungen. Wann genau tritt dieser Fehler denn auf? Zu starten scheint der Browser ja.

LG

tuxifreund

IchFragMalSo

Avatar von IchFragMalSo

Anmeldungsdatum:
30. November 2020

Beiträge: 5

Wohnort: Lichess

Hallo tuxifreund,

nachdem du die Fehler behoben hast, ist der Browser richtig toll, aber halt ein bisschen altmodisch 😉 ... Du schaffst es noch, dass der Browser gut wird, glaub ich.

Axel-Erfurt

Anmeldungsdatum:
18. Mai 2016

Beiträge: 1347

tuxifreund

Mit meinem Beitrag meinte ich, dass sich der Eintrag in der Adressleiste automatisch anpassen soll, wenn ich einen Link anklicke.

Kannst Du machen mit

1
self.view.connect("notify::uri", self.change_uri)
1
2
3
    def change_uri(self, widget, data, *arg):
        uri = widget.get_uri()
        self.addressbar.set_text(uri)

Axel-Erfurt

Anmeldungsdatum:
18. Mai 2016

Beiträge: 1347

Noch ein Tipp,

Du hast ein Installations-Skript, es sollte auch eins zum Deinstallieren geben.

tuxifreund Team-Icon

Projektleitung
(Themenstarter)

Anmeldungsdatum:
7. November 2020

Beiträge: 1175

Hallo,

Axel-Erfurt schrieb:

vielleicht noch automatisch den Fenstertitel setzen.

ist eingefügt.

Axel-Erfurt schrieb:

Kannst Du machen mit

1
self.view.connect("notify::uri", self.change_uri)

Auch das ist jetzt in den Code gewandert.

Axel-Erfurt schrieb:

Du hast ein Installations-Skript, es sollte auch eins zum Deinstallieren geben.

Es gibt jetzt kein sperates Deinstallationsskript. Die bisherige install.sh wurde überarbeitet:

./install.sh install #installiert MyBrowse, kein Argument notwendig
./install.sh remove #deinstalliert MyBrowse
./install.sh upgrade #aktualisiert MyBrowse

Danke dir nochmal vielmals, Axel-Erfurt!!

LG

tuxifreund

gerold123

Avatar von gerold123

Anmeldungsdatum:
18. April 2006

Beiträge: 1320

Wohnort: /Wild/Eastern/Europe

tuxifreund schrieb:

Bei mir ist die Datei auf dem System auch nicht vorhanden, aber der Browser läuft ohne Fehlermeldungen. Wann genau tritt dieser Fehler denn auf? Zu starten scheint der Browser ja.

Der Browser startet ohne Fehlermeldung im Terminal. Der Fehler kommt erst beim Aufrufen einer anderen URL.

tuxifreund Team-Icon

Projektleitung
(Themenstarter)

Anmeldungsdatum:
7. November 2020

Beiträge: 1175

Hallo,

ich habe gerade den Code mit v0.2 getaggt. MyBrowse steht ab jetzt unter Version3 der GPL. Neue Funktionen sind:

  • Zur URL wird automatisch "https://" hinzugefügt wenn kein Protokoll angegeben wurde.

  • Es gibt eine Suchleiste. Suchmaschine ist aktuell noch DuckDuckGo. In der nächsten Version wird man das einstellen können.

Ein Update geht mit dem Installationsskript mit folgendem Befehl

./install.sh upgrade

LG

tuxifreund

noisefloor Team-Icon

Ehemaliger
Avatar von noisefloor

Anmeldungsdatum:
6. Juni 2006

Beiträge: 29551

Wohnort: WW

Hallo,

ist keine gute Idee, verwende lieber os.path.expanduser('~')

Stand der Ding ist das pathlib Modul und die Path.home Methode. Macht das gleich, aber halt in "modern".

Gruß, noisefloor

Axel-Erfurt

Anmeldungsdatum:
18. Mai 2016

Beiträge: 1347

noisefloor schrieb:

Stand der Ding ist das pathlib Modul und die Path.home Methode. Macht das gleich, aber halt in "modern".

Da hast Du natürlich recht.

Ein Beispiel dazu.

Ich habe noch eine Abfrage eingebaut ob mybrowse.cfg auch existiert, wenn nicht wird eine neue angelegt.

Denn wenn ein DAU die Datei löscht startet das Programm sonst gleich mit einem Crash.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import configparser
from pathlib import Path

config = configparser.ConfigParser()
conf_dir = f"{Path.home()}/.config/mybrowse/"

p = Path(conf_dir)

if p.is_dir():
    print(f"{conf_dir} exists")
else:
    print(f"{conf_dir} not exists, creating ...")   
    p.mkdir()

conf_file = p / 'mybrowse.cfg'

if Path.is_file(conf_file):
    print(f"found config file: {conf_file}")
    config.read(conf_file)
else:
    print("no config file found")
    # config erzeugen
    with open(conf_file, 'w') as f:
        f.write("[General]\nhome = https://lite.duckduckgo.com/lite/")
        f.close()
    config.read(conf_file)
    
print(config['General']['home'])

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11228

Wohnort: München

Das könnte man nach dem Motto "ask forgiveness not permission" noch etwas umstellen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import configparser
import logging
from pathlib import Path

config = configparser.ConfigParser()
conf_file = Path.home() / ".config/mybrowse/mybrowse.cfg"
conf_file.parent.mkdir(parents=True, exist_ok=True)

try:
    with open(conf_file) as f:
        config.read_file(f)
except FileNotFoundError:
    logging.error("no config file found")
    with open(conf_file, 'w') as f:
        config.read_dict({'General': {'home': "https://lite.duckduckgo.com/lite/"}})
        config.write(f)
except IOError:
    logging.exception(f"{conf_file} is not a readable file")
    raise SystemExit(2)
except configparser.ParsingError:
    logging.exception("parsing the config file failed")
    raise SystemExit(1)

print(config['General']['home'])
Antworten |