【问题标题】:wxpython, passing user datas to html2wxpython,将用户数据传递给 html2
【发布时间】:2013-05-09 11:20:44
【问题描述】:

我正在尝试开发 python GUI 来访问网页。下面的例子工作正常。但我需要在此代码中传递用户凭据(用户名/密码)。

我不想点击那个按钮。只是我需要在登录页面中填写文本框

import wx 
import wx.html2 

class MyBrowser(wx.Dialog): 
  def __init__(self, *args, **kwds): 
    wx.Dialog.__init__(self, *args, **kwds) 
    sizer = wx.BoxSizer(wx.VERTICAL) 
    self.browser = wx.html2.WebView.New(self) 
    self.browser.LoadURL("http://wiki.python.org/moin/GuiProgramming?action=login") 
    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() 

【问题讨论】:

    标签: python wxpython wxwidgets wx.html2


    【解决方案1】:

    “使用 javascript”的答案当然很有帮助,但无论如何,对于最新版本的 wxPython,除非 wx.html2.EVT_WEB_VIEW_LOADED 更改为 wx.html2.EVT_WEBVIEW_LOADED(“WEB_VIEW 更改为“WEBVIEW”),否则它不会运行。

    【讨论】:

    • 这应该是代码sn-p答案的注释。我终于自己找到了答案,只是回到这里用信息更新答案并看到了这个。
    【解决方案2】:

    使用 JavaScript。下面是简单的示例代码。

    import wx 
    import wx.html2 
    
    class MyBrowser(wx.Dialog): 
        def __init__(self, *args, **kwds): 
            wx.Dialog.__init__(self, *args, **kwds) 
            sizer = wx.BoxSizer(wx.VERTICAL) 
            self.browser = wx.html2.WebView.New(self) 
            self.browser.LoadURL("http://wiki.python.org/moin/GuiProgramming?action=login") 
            sizer.Add(self.browser, 1, wx.EXPAND, 10) 
            self.SetSizer(sizer) 
            self.SetSize((700, 700)) 
    
            # We have to bind an event so the javascript is only run once the page 
            # is  loaded.
            self.Bind(wx.html2.EVT_WEB_VIEW_LOADED, self.OnPageLoaded, 
                    self.browser)
    
    
        def OnPageLoaded(self, evt):
            self.browser.RunScript("""
                // There are probably better ways to get the elements you
                // want, but this works.
                document.getElementsByName('name')[0].value="hist";
                document.getElementsByName('password')[0].value="bar";
    
                document.getElementById('openididentifier').value="ident";
    
                // If you want to submit the form you can use something like
                //document.getElementsByName('login')[1].click()
                """)
    
            # And you probably want to unbind the event here
            self.Bind(wx.html2.EVT_WEB_VIEW_LOADED, None, 
                    self.browser)
    
    if __name__ == '__main__': 
      app = wx.App() 
      dialog = MyBrowser(None, -1) 
      dialog.Show() 
      app.MainLoop() 
    

    【讨论】:

    • 上述代码中的错字...EVT_WEB_VIEW_LOADED 应该是EVT_WEBVIEW_LOADED
    • 认为这是在 wxPython 2.9 版本之一中切换的,旧版本使用 EVT_WEB_VIEW_LOADED,较新版本使用 EVT_WEBVIEW_LOADED - 显然使用与您的版本一起使用的任何一个,或者如果您必须同时支持两者,请使用 try/except阻止并捕获 AttributeError。
    【解决方案3】:

    我会检查 Selenium。这是一个开源的网络导航自动化工具,它为 python 开发了一个很棒的模块。我用它来自动登录到多个不同的网站,你可以很容易地在它上面加一个 wx GUI。

    【讨论】:

      猜你喜欢
      • 2013-03-24
      • 1970-01-01
      • 1970-01-01
      • 2021-04-04
      • 2012-03-21
      • 1970-01-01
      • 2021-06-11
      • 2011-05-31
      • 1970-01-01
      相关资源
      最近更新 更多