2013-05-09 170 views
2

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

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

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

回答

1

使用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() 
+0

上面代码中的错字... 'EVT_WEB_VIEW_LOADED' 应该是 'EVT_WEBVIEW_LOADED' – nmz787 2014-07-19 09:09:08

+0

认为这是在其中一个wxPython 2.9版本中切换的,旧版本使用EVT_WEB_VIEW_LOADED,新版本EVT_WEBVIEW_LOADED - 显然使用哪个版本与您的版本兼容,或者如果您必须同时支持使用try/except阻止并捕获AttributeError。 – Ross 2014-07-20 09:50:16

2

“使用JavaScript的”答案肯定是有帮助的,但随着新版本的wxPython的,无论如何,除非wx.html2.EVT_WEB_VIEW_LOADED改为wx.html2.EVT_WEBVIEW_LOADED它不会运行(“WEB_VIEW改为” WEBVIEW“)

+0

这应该是对代码片段的回答的评论。我终于自己找到了答案,只是回到这里来更新信息的答案,并看到了这一点。 – nmz787 2014-07-19 09:08:51

-2

我会检查一下Selenium它是一个开源的web导航自动化工具,它为python开发了一个很棒的模块,我用它来自动登录到多个不同的网站,你可以轻松地拍一个wx图形用户界面