【问题标题】:How to create a HTML-dialog window in Python with Internet Explorer control?如何使用 Internet Explorer 控件在 Python 中创建 HTML 对话框窗口?
【发布时间】:2016-07-09 21:40:05
【问题描述】:

我需要创建一个显示 HTML 页面的对话框。该应用程序是用 Python 编写的,对话框必须包含 Internet Explorer 控件。 Python 是否支持与 COM/ActiveX 的集成,是否有这种集成的工作示例?

如果可能,请提供不带第三方网站链接的答案。 请不要提供 .NET/C++/Chrome 或任何其他组合。 Python+IE 是我的要求,不能更改。

【问题讨论】:

  • 要求我们推荐或查找书籍、工具、软件库、教程或其他非现场资源的问题对于 Stack Overflow 来说是题外话,因为它们往往会吸引固执己见答案和垃圾邮件。你现在应该知道了……

标签: python html internet-explorer com activex


【解决方案1】:

您可以使用 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 类在窗口中嵌入 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"))

【讨论】:

    【解决方案2】:

    您可以通过 Python 轻松使用 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. &lt;tab&gt;),那么上面的简单示例就足够了。

    还请注意,在使用 COM 对象时,您通常可以通过运行以下命令大大加快它们的速度:

    from win32com.client import makepy
    makepy.main()
    

    然后滚动弹出窗口并找到您的应用程序(IE 为Microsoft Internet Controls) - 所有注册的 COM 接口都应该在那里,这将自动生成内部方法,而不是每次调用库时都这样做。

    【讨论】:

      猜你喜欢
      • 2019-06-05
      • 2013-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多