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

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()
Le fichier pour l'interface :
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