-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
111 lines (99 loc) · 3.62 KB
/
main.py
File metadata and controls
111 lines (99 loc) · 3.62 KB
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import urllib.request
from tkinterhtml import HtmlFrame
from tkinter import *
import tkinter as tk
from bs4 import BeautifulSoup
# Kaksi alempaa riviä voi poistaa, jollei cxfreezen avulla tee tästä standalone binääriä
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
# Edellisen sivun vaihto
es = []
k = 0
# Ikkunan luonti
root = tk.Tk()
# Otsikko
label = Label(root, text="Pekan selain", font=("Courier 22 bold"))
label.pack()
# Osoitteen syöttökenttä
entry = Entry(root, width= 40, font="Calibri 15")
entry.focus_set()
entry.pack()
# HtmlFramen luonti, jotta se olisi globaali ja voitaisiin käyttää funktiossa niin, että viitataan aikaisemmin suoritettuun funktioon, jotta aikaisempi sivu voidaan poistaa toisen tieltä
frame = HtmlFrame(root, horizontal_scrollbar="auto")
lf = HtmlFrame(root, horizontal_scrollbar="auto")
# Yhdistää internettiin ja näyttää renderöidyn html:n
def internet(kw):
# Tarvitaan osoitekentän syöte ja yhtys htmlframeen
global entry
global frame
global lf
global k
# Osoitteen hakeminen
string = entry.get()
ns = ""
# Suodatetaan kopioidessa tullett kaksi valkoista neliötä (ja myös muut roskat)
for x in string:
if x in "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz$-_.+!*#'()/&?=:%1234567890":
ns += x
string = ns
# Poistetaan aikaisempi sivu
frame.destroy()
# Uuden sivun luonti ja internettiin yhdistäminen sivun html:n hakemista varten
frame = HtmlFrame(root, horizontal_scrollbar="auto")
frame.set_content("<html></html>")
# Tätä muuttujaa voidaan käyttää myös linkkien saamisessa
try:
html = urllib.request.urlopen(string).read()
# Jutut sivun vaihdosta varten (siis siinä on käytännössä sivu lista missä mennään edestakas)
if kw:
if string not in es:
es.append(string)
k = len(es) - 1
except:
html = ""
frame.set_content(html.decode())
frame.pack()
# Koko seuraava osio on: Linkkien haku, eli etsitään beaoutiful soupin avulla kaikki linkit, joita sivulla on jotta pääsee kunnolla surffaamaaan verkossa kopiomalla sivun sisällä olevan linkin ja liittämällä sen kenttään ja painamalla avaa
hrefs = []
thtml = "<!DOCTYPE html>\n<html>\n <body>\n"
soup = BeautifulSoup(html, 'html.parser')
for a in soup.find_all('a', href=True):
hrefs.append(a['href'])
#print(hrefs)
for x in hrefs:
thtml += " <h2>" + x + "</h2>\n"
thtml += " </body>\n</html>"
# Poistetaan aikaisempi sivu
lf.destroy()
# Lisätään linkki html sivu
lf = HtmlFrame(root, horizontal_scrollbar="auto")
lf.set_content("<html></html>")
lf.set_content(thtml)
lf.pack()
# Mennään edellieen
def sw():
global es, k
if k - 1 >= 0:
k -= 1
entry.delete(0, END)
print(es, k)
entry.insert(0, es[k])
internet(False)
# Mennään "tulevaan"
def swt():
global es, k
if k + 1 < len(es):
k += 1
entry.delete(0, END)
entry.insert(0, es[k])
internet(True)
# Ei voi pistää arvoja suoraan command =, kautta
def inter():
internet(True)
# Avaa nappi, joka suorittaa internet funktion
tk.Button(root, text= "Avaa", width= 20, command = inter).pack(pady=20)
# Napit sivuun palaamiseen
tk.Button(root, text= "←", width= 2, font=("Helvetica 22 bold"), command = sw).pack(side=LEFT, padx=50)
tk.Button(root, text= "→", width= 2, font=("Helvetica 22 bold"), command = swt).pack(side=RIGHT, padx=50)
# Avataan ikkuna
root.mainloop()