我需要创建一个显示HTML页面的对话框。应用程序是用Python编写的,对话框必须包含Internet Explorer控件。 Python是否支持与COM / ActiveX的集成,是否有任何这种集成的工作示例?
如果可能,请提供答案,不要链接到第三方网站。 请不要提供.NET / C ++ / Chrome或任何其他组合。 Python + IE是我的要求,无法更改。
答案 0 :(得分:3)
您可以使用wxWidgets WebView
组件(通过wxPython)在Python GUI应用程序中嵌入Internet Explorer窗口。与...不同Qt包括跨所有平台的标准化浏览器组件,wxWidgets默认使用主机平台上的本机浏览器。您也可以通过手动设置后端来强制IE(忽略用户的默认浏览器)。
在文档中显示WEBVIEW_BACKEND_IE
,但实际值可通过wx.html2.WebViewBackendIE
获得。以下是一个完整的工作示例,改编自here:
import wx
import wx.html2
class MyBrowser(wx.Frame):
def __init__(self, *args, **kwds):
wx.Frame.__init__(self, *args, **kwds)
sizer = wx.BoxSizer(wx.VERTICAL)
self.browser = wx.html2.WebView.New(self, backend=wx.html2.WebViewBackendIE)
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.browser.LoadURL("https://www.google.com")
dialog.Show()
app.MainLoop()
当然,这只适用于Windows。有关wxWidgets中WebView的更多信息,请参阅documentation。
如果您已经为您的应用程序使用(Py)Qt,Qt还支持使用QAxWidget
类在Windows中嵌入ActiveX对象。 Qt documentation中有一个Web浏览器示例。以下是最小PyQt4 example:
browser = QAxContainer.QAxWidget()
browser.setControl("<ActiveX ID>") # e.g. "{8856F961-340A-11D0-A96B-00C04FD705A2}"
browser.dynamicCall('Navigate(const QString&)', QtCore.QString("google.com"))
答案 1 :(得分:3)
你可以在没有太多困难的情况下使用COM。这是一个简单的例子:
import win32com.client
ie = win32com.client.Dispatch("InternetExplorer.Application")
ie.Visible = 1
ie.Navigate('www.google.com')
您可能只想下载此项目并阅读IEC.py以获取有用的所有com命令(我知道您不是在寻找链接,但在这种情况下,已有500行代码可以为您节省大量时间,按钮点击,获取文档文本,复选框,提交表单等。)http://www.mayukhbose.com/python/IEC/
我认为这将解决您的问题。如果您已经知道所有的IE com命令(或者只是在IPython中点击“tab”来获取列表In [1]: ie. <tab>
),那么上面的简单示例就足够了。
另外请注意,使用COM对象时,只需运行此对象即可大大加快它们的速度:
from win32com.client import makepy
makepy.main()
然后滚动弹出窗口找到你的应用程序(IE Microsoft Internet Controls
) - 所有已注册的COM接口应该在那里,这将自动生成内部方法,而不是每次调用库时都这样做。