2013-05-09 2 views
2

Я пытаюсь разработать графический интерфейс python для доступа к веб-страницам. ниже пример работает нормально. но мне нужно передать учетные данные пользователя (имя пользователя/пароль) в этом коде.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

Typo in above code ... 'EVT_WEB_VIEW_LOADED' должно быть 'EVT_WEBVIEW_LOADED' – nmz787

+0

Думайте, что это было включено в один из выпусков wxPython 2.9, более старые версии используют EVT_WEB_VIEW_LOADED, новее EVT_WEBVIEW_LOADED - очевидно, использовать, который когда-либо работал с вашей версией, или если вам нужно поддерживать оба варианта try/except блокировать и улавливать AttributeError. – Ross

2

«Использовать JavaScript» Ответ, конечно, полезно, но с последними версиями WxPython в любом случае, он не будет работать, если wx.html2.EVT_WEB_VIEW_LOADED не будет изменен на wx.html2.EVT_WEBVIEW_LOADED («WEB_VIEW изменено на» WEBVIEW ").

+0

Это должен быть комментарий к ответу с фрагментом кода. Я, наконец, наткнулся на ответ сам и просто возвращался сюда, чтобы обновить ответ с информацией и увидел это. – nmz787

-2

Я бы попробовал Selenium. Это инструмент автоматизации веб-навигации с открытым исходным кодом, который разработал потрясающий модуль для python. Я использовал его для автоматизации входа на несколько разных веб-сайтов, и вы можете легко пощекотать wx GUI сверху.

Смежные вопросы