我正试图从一个HTML网站上刮取动态信息。由于我工作的地方是一家银行,我只能使用他们认证为安全的库。Selenium和PyQt不是我的选择,所以我必须使用wx.html2。
我发现了这个代码片段。
import wx
import wx.html2
class MyBrowser(wx.Dialog):
def __init__(self, *args, **kwds):
url = "http://www.exampleurl.com"
wx.Dialog.__init__(self, *args, **kwds)
sizer = wx.BoxSizer(wx.VERTICAL)
self.browser = wx.html2.WebView.New(self, url=url)
sizer.Add(self.browser, 1, wx.EXPAND, 10)
self.SetSizer(sizer)
self.SetSize((700, 700))
if __name__ == '__main__':
app = wx.App()
dialog = MyBrowser(None, -1)
dialog.Show()
app.MainLoop()
这可以让我打开一个网页对话框并看到所需的内容。我想使用wx.html2.WebView GetPageSource()方法。
https:/wxpython.orgPhoenixdocshtmlwx.html2.WebView.html。
我已经在MyBrowser类中试过了。
class MyBrowser(wx.Dialog):
def __init__(self, *args, **kwds):
url = "http://www.exampleurl.com"
wx.Dialog.__init__(self, *args, **kwds)
sizer = wx.BoxSizer(wx.VERTICAL)
self.browser = wx.html2.WebView.New(self, url=url)
sizer.Add(self.browser, 1, wx.EXPAND, 10)
self.SetSizer(sizer)
self.SetSize((700, 700))
print(wx.html2.WebView.GetPageContent(self.browser))
任何关于如何获得这个HTML源的想法 或者是关于这个类的见解将被感激。谢谢。
我怀疑,如果没有一个事件来触发请求,你试图获取源码的行为发生得太快,即页面还没有加载。
以下是简单的打印页面的源代码。你可能想显示它或将其转储到一个文件中,我让你去做。
在你提出自动化的意见后,这里有一个版本的代码,以一种快速、黑客的方式,展示了你的要求。
import wx
import wx.html2
import time
class MyBrowser(wx.Dialog):
def __init__(self, *args, **kwds):
self.url = ["http://www.stackoverflow.com","http://www.duckduckgo.com"]
wx.Dialog.__init__(self, *args, **kwds)
sizer = wx.BoxSizer(wx.VERTICAL)
self.frame_no = 0
self.browser = wx.html2.WebView.New(self)#, url=None)
self.get = wx.Button(self, wx.ID_ANY, "Get Source")
self.quit = wx.Button(self, wx.ID_ANY, "Quit")
sizer.Add(self.browser, 1, wx.EXPAND, 10)
sizer.Add(self.get, 0, wx.ALL, 0)
sizer.Add(self.quit, 0, wx.ALL, 0)
self.SetSizer(sizer)
self.SetSize((700, 700))
self.browser.Bind(wx.html2.EVT_WEBVIEW_LOADED, self.OnAutoGet)
self.Bind(wx.EVT_CLOSE, self.OnQuit)
self.get.Bind(wx.EVT_BUTTON, self.OnGet)
self.quit.Bind(wx.EVT_BUTTON, self.OnQuit)
self.browser.LoadURL(self.url[self.frame_no])
def OnAutoGet(self, event):
print("Loaded Frame", self.frame_no, event.GetURL())
time.sleep(2)
self.OnGet(None)
self.frame_no += 1
if self.frame_no < len(self.url):
self.browser.LoadURL(self.url[self.frame_no])
def OnGet(self, event):
print(self.browser.GetPageSource())
def OnQuit(self, event):
self.Destroy()
if __name__ == '__main__':
app = wx.App()
dialog = MyBrowser(None, -1)
dialog.Show()
app.MainLoop()