2013-05-09 72 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圖形用戶界面