在Python中为wx.html2获取页面源码。

问题描述 投票:0回答:1

我正试图从一个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源的想法 或者是关于这个类的见解将被感激。谢谢。

python webview wxpython wx.html2
1个回答
0
投票

我怀疑,如果没有一个事件来触发请求,你试图获取源码的行为发生得太快,即页面还没有加载。

以下是简单的打印页面的源代码。你可能想显示它或将其转储到一个文件中,我让你去做。

在你提出自动化的意见后,这里有一个版本的代码,以一种快速、黑客的方式,展示了你的要求。

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() 

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.