首页 > 解决方案 > Python 中 wx.html2 的 GetPageSource

问题描述

我正在尝试从 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() 

这使我可以打开一个 Web 对话框并查看所需的内容。我想要的是使用 wx.html2.WebView GetPageSource() 方法。

https://wxpython.org/Phoenix/docs/html/wx.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 的想法或对此类的见解将不胜感激。谢谢。

标签: pythonwebviewwxpythonwx.html2

解决方案


我怀疑如果没有触发请求的事件,您尝试获取源的尝试发生得太快,即页面没有加载。

下面简单打印页面的源代码。
您可能想要显示它或将其转储到文件中,我把它留给您。

在您对自动化发表评论之后,这里有一个代码版本,它以一种快速、简单的方式展示了您的需求。

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

在此处输入图像描述


推荐阅读