Bonjour, je me suis mis à Python, plus précisément à PythonCard pour réaliser un browser simple s'appuyant sur IE et dont l'exemple est simpleIEBrowser.
L'exemple fournit le code suivant :
simpleIEBrowser.py
Le fichier pour l'interface :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 from PythonCard import dialog, model import wx class SimpleBrowser(model.Background): def on_initialize(self, event): filename = self.application.applicationDirectory + '/index.html' self.components.htmlDisplay.text = filename btnFlags = wx.LEFT | wx.ALIGN_CENTER_VERTICAL sizer2 = wx.BoxSizer(wx.HORIZONTAL) sizer2.Add(self.components.btnBack, 0, btnFlags, 5) sizer2.Add(self.components.btnForward, 0, btnFlags, 5) sizer2.Add(self.components.btnReload, 0, btnFlags, 5) sizer2.Add(self.components.fldURL, 1, btnFlags, 5) sizer2.Add(self.components.btnGo, 0, btnFlags, 5) sizer1 = wx.BoxSizer(wx.VERTICAL) sizer1.Add(sizer2, 0, wx.EXPAND) sizer1.Add((5, 5), 0) # spacer sizer1.Add(self.components.htmlDisplay, 1, wx.EXPAND) sizer1.Fit(self) sizer1.SetSizeHints(self) self.panel.SetSizer(sizer1) self.panel.SetAutoLayout(1) self.panel.Layout() def on_htmlDisplay_titleChange(self, event): self.title = "SimpleIEBrowser: %s" % event.Text def on_htmlDisplay_statusTextChange(self, event): self.statusBar.text = event.Text def on_htmlDisplay_documentComplete(self, evt): self.current = evt.URL self.components.fldURL.text = self.current def on_goReload_command(self, event): """ enum wxIEHtmlRefreshLevel { wxIEHTML_REFRESH_NORMAL = 0, wxIEHTML_REFRESH_IFEXPIRED = 1, wxIEHTML_REFRESH_CONTINUE = 2, wxIEHTML_REFRESH_COMPLETELY = 3 }; """ # 3 is the same as wxIEHTML_REFRESH_COMPLETELY self.components.htmlDisplay.Refresh(3) def on_goBack_command(self, event): self.components.htmlDisplay.GoBack() def on_goForward_command(self, event): self.components.htmlDisplay.GoForward() def addTextToItems(self): target = self.components.fldURL text = target.text items = target.items if not items.count(text): items.insert(0, text) target.items = items target.text = text target.SetInsertionPointEnd() target.SetMark(-1, -1) def on_goURL_command(self, event): # KEA 2004-04-06 # clean up the URL # by getting rid of leading and trailing whitespace # and adding http:// if it is missing from the front # of the url target = self.components.fldURL text = target.text.strip() if not text.startswith('http://'): text = 'http://' + text if target.text != text: target.text = text self.addTextToItems() self.components.htmlDisplay.text = self.components.fldURL.text def openFile(self, path): self.components.htmlDisplay.text = path def on_menuFileOpen_select(self, event): wildcard = "HTML files (*.htm;*.html)|*.htm;*.html|All files (*.*)|*.*" result = dialog.openFileDialog(None, "Open file", '', '', wildcard) if result.accepted: path = result.paths[0] self.openFile(path) def on_fldURL_keyPress(self, event): keyCode = event.keyCode target = event.target if keyCode == 13: self.on_goURL_command(None) else: event.skip() if __name__ == '__main__': app = model.Application(SimpleBrowser) app.MainLoop()
simpleIEBrowser.rsrc.py
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 {'application':{'type':'Application', 'name':'SimpleIEBrowser', 'backgrounds': [ {'type':'Background', 'name':'bgMin', 'title':'SimpleIEBrowser PythonCard Application', 'size':(1448, 878), 'statusBar':1, 'style':['resizeable'], 'menubar': {'type':'MenuBar', 'menus': [ {'type':'Menu', 'name':'menuFile', 'label':'&File', 'items': [ {'type':'MenuItem', 'name':'menuFileOpen', 'label':'&Open\tCtrl+O', }, {'type':'MenuItem', 'name':'fileSep1', 'label':'-', }, {'type':'MenuItem', 'name':'menuFileExit', 'label':'E&xit\tAlt+X', 'command':'exit', }, ] }, ] }, 'components': [ {'type':'ComboBox', 'name':'fldURL', 'position':(200, 0), 'size':(300, -1), 'items':[], }, {'type':'Button', 'name':'btnGo', 'position':(550, 0), 'command':'goURL', 'default':1, 'label':u'Go', }, {'type':'Button', 'name':'btnBack', 'position':(0, 0), 'command':'goBack', 'label':u'Back', }, {'type':'Button', 'name':'btnForward', 'position':(100, 0), 'command':'goForward', 'label':u'Forward', }, {'type':'Button', 'name':'btnReload', 'position':(200, 0), 'command':'goReload', 'label':u'Reload', }, {'type':'IEHtmlWindow', 'name':'htmlDisplay', 'position':(0, 30), 'size':(750, 550), }, ] # end components } # end background ] # end backgrounds } }
Mon objectif est d'enregistrer les pages web chargées au fur et à mesure dans un fichier quand je clique dans les pages. Typiquement, c'est un aspirateur manuel qui va ensuite checker les liens morts, internes, externes, pour la maintenance de divers sites.
Je me contenterai de l'enregistrer dans C://toto.txt ou dans le rep de travail de Python, mais ce que je n'arrive pas à faire :
intercepter le moment ou il y a un changement (je suppose que c'est sur on_goURL_command )
ensuite, enregistrer le texte nettoyer ou le html complet de la page avec les balises.
Si quelqu'un peut me donner un coup de main, ce serait top car se mettre à python c'est une chose, en faire un prog sympa, cela en est une autre !!
Merci de votre attention
Partager