python - 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 的想法或对此类的见解将不胜感激。谢谢。
解决方案
我怀疑如果没有触发请求的事件,您尝试获取源的尝试发生得太快,即页面没有加载。
下面简单打印页面的源代码。
您可能想要显示它或将其转储到文件中,我把它留给您。
在您对自动化发表评论之后,这里有一个代码版本,它以一种快速、简单的方式展示了您的需求。
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()
推荐阅读
- node.js - Gguide 在 bleno (BLE) 中实现绑定/配对
- python - 实施重试例程
- elasticsearch - Elasticsearch确定聚合中的桶长度
- jquery - Datepicker 仅适用于两位数的输入
- python - numba jit 是否有可能减慢我的 gcd 执行速度?
- javascript - 如何使用 js 在特定日期过期 XML 节点?
- laravel - 获取所有相关记录 laravel
- angularjs - Angularjs $http服务jsonp方法不断返回404状态码
- android - 将 EditText 文本保存到数据库的性能问题
- python - 修改关闭某个变量的函数时出现问题。旧的封口不适合。空闭包崩溃解释器