【问题标题】:Lightweight Python Web Browser轻量级 Python Web 浏览器
【发布时间】:2014-07-30 20:04:49
【问题描述】:

这里有一个奇怪的要求,但我无法真正找到答案。

我正在编写一个显示网页和本地存储图像的 python 应用程序。

我需要的是一种使用 python 显示网页的方法,这种方法非常轻量级且速度非常快。原因是它在 Raspberry Pi 上运行。

当然我有很多选择,我可以通过安装在 Raspbian 发行版上的 Web 浏览器运行它并在 python 中作为一个单独的进程运行它,我可以下载一个 Arch-Linux 兼容的浏览器并在 python 中作为一个单独的进程运行它最后我可以使用 Gtk 或 PyQt 编写我自己的原生 python 文件。

所有这些方法都有其缺点和严重的开销。当我要显示网页时,网络浏览器也必须全屏显示,并在显示图像时最小化。

我对 Gtk 和 PyQt 的主要问题是它们必须在主线程上执行的方式——这是不可能的,因为它不符合我的多线程架构。使用预装在 raspbian 上的网络浏览器的缺点是,从 python 中你缺乏控制并且速度很慢。最后,使用 Arch-Linux 浏览器的问题在于它最终变得混乱且难以控制。

理想情况下,我需要一个几乎可以立即加载网页的网络浏览器,或者一个可以处理多个实例的多线程网络浏览器。这样我可以在显示另一个浏览器的同时在后台缓冲一个网页。

你们有什么建议可以为我指明正确的方向吗?我原以为现在会有一个简洁的基于多线程 python 的解决方案,我认为这要么是因为没有人需要做我正在做的事情(不太可能) - 要么我错过了一些大事(更有可能)!

任何建议将不胜感激。

詹姆斯。

【问题讨论】:

  • See
  • @KronoS 这不就是解析 DOM 而不是显示 DOM 吗?

标签: python multithreading web browser python-webbrowser


【解决方案1】:

我会使用 PyQT 来显示页面,但如果 PyQT 使用线程的方式不适合您的应用程序,您可以使用 PyQT 编写一个极简主义(我在这里说的是大约 10 行代码)网络浏览器,并从您的主应用程序中分叉它?

【讨论】:

  • 你能举个例子吗?另外 - 您可以运行该浏览器的多个实例吗?
  • 是的,您可以根据需要分叉一个进程
【解决方案2】:

我想到的解决方案是使用几个用于 linux 的帧缓冲浏览器:netsurf-fb 和带有 - 的 links2。

但是经过广泛的测试 - 我认为不适合使用这些,因为它们不支持 javascript。

因此,最终的解决方案是使用一个名为 cutycapt 的脚本,该脚本在名为 xvfb 的虚拟 x 窗口帧缓冲区中运行。

我使用 pxpect 库从 python 调用它,如下所示:

process=pexpect.spawn(xvfb_run_bin+' --server-args "-screen 0, '+self.width_height+'x24" cutycapt --url='+uri+' --out='+temp_path)
        process.wait()

这在我的实现中关闭,呈现页面并保存屏幕截图。然后图像查看器从我的缓存中获取图像并显示它。

如果有人有任何其他问题 - 请随时评论这个问题......

导入可爱的人信息。如果您想使用 javascript 呈现整个页面,则需要更长的时间...指定 --delay 1000 在这种情况下它将延迟加载 1 秒。对我来说,它需要大约 7000 才能让它恰到好处......

【讨论】:

    【解决方案3】:

    我已经在 vala 写了 winks-up。 它小而快,在 raspbian 上编译得很好。 所有代码都经过优化以减少内存占用。 不完美,但比什么都好

    【讨论】:

    • 这不能回答问题
    猜你喜欢
    • 1970-01-01
    • 2011-03-20
    • 2014-06-08
    • 2014-06-07
    • 2011-01-30
    • 1970-01-01
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多