“我稍后再读”:离线网页收藏的艰难命运

有些类型的软件是有些人离不开的,而另一些人甚至无法想象这样的东西存在或任何人都需要它。对我来说,这个项目多年来一直是 Macropool网络研究,它允许您保存、阅读和组织互联网页面到一种离线图书馆中。我确信我们的许多读者都可以很好地使用链接集合或浏览器和包含一组已保存文档的文件夹的组合。我希望至少能够将文档标记为“已读”或“收藏”,快速从一个文本移动到另一个文本,而不依赖于互联网或特定站点的可用性。碰巧在没有互联网的情况下(例如在路上)有时间准确阅读,不幸的是,链接往往是短暂的。

显然,WebResearch 的作者大约指望这些人。该程序具有多种功能:按部分和标签编目、编辑注释、各种导出/导入等等。然而,2013年左右,该项目停止更新,随后开发商的网站也不复存在。我又设法骑了几年,但首先浏览器插件脱落了(仅适用于当时版本的 IE 和 FireFox),然后现代网站停止在基于旧 IE 引擎的查看器中正常显示。

“我稍后再读”:离线网页收藏的艰难命运
WebResearch 主窗口, PC 周刊/RE 第 17 号 (575)

失望之路

一旦意识到更换是不可避免的,我就开始在后台寻找一个像样的类似物。在我看来,这里不会有任何特别的困难,因为我的愿望非常温和。我准备只使用一小部分网络研究工具,包括:

  • 使用扩展程序从浏览器保存 HTML 页面;
  • 至少有最少的编目工具(重命名、组织目录、标签);
  • (最好)支持 PDF 文档;
  • 任何将您的收藏与其他设备同步的好方法。

令我惊讶的是,我找不到任何类似的东西,尽管我诚实地在互联网上广泛搜索并仔细研究了十几个与注释相匹配的程序(Evernote 除外,其中描述类似的功能只能通过订阅才能获得)。今天,唯一至少能在某种程度上满足我愿望的就是项目 标签空间 и 我的基地。一般来说,他们的研究具有一定的文化趣味。

TagSpaces 就是 Electron 上的一个“时尚、时尚、青年”的组织者,拥有漂亮的网站、自适应布局,当然还有深色主题,没有它我们会怎样。与此同时,带有时尚圆形图标的不幸的集合目录占据了半个屏幕,同时最多容纳了大约二十个元素,并且写了诸如支持热键或渲染正在查看的文档之类的基本内容根据剩余原则。结果,文档显示歪斜,并且使用集合的工作变成了一组无聊且耗时的鼠标练习。

它的对映体 myBase 来自九十年代末:在这里,除了 纯函数式接口 我们有极其丰富的设置和功能。然而,这里的查看窗口是基于旧IE的相同浏览器(这已经使阅读变得困难),并且所有文档都存储在一个整体数据库中。例如,如果你把它放在 Dropbox 文件夹中(仍然没有其他方法可以与其他设备同步),那么集合中哪怕有最轻微的变化,你都必须等到数百兆字节的信息上传到服务器。

转身的时刻

也许,该注释的进一步内容对读者来说似乎是显而易见的:现在我们将提供自己的自行车,当然,它将远远超过任何现有的类似产品。有点是,但又不完全是。我真的无法忍受 myBase 和 TagSpaces 的考验,并勾勒出我自己的文档管理器,我将在接近尾声时提供该链接。然而,这个小小的个人项目本身不值得单独写一篇文章。我写这篇文章主要是因为我认为分享我在工作中获得的经验以及一些我从未预料到的不愉快的惊喜会很有趣。

目标和目标

首先,我现在的生活非常忙碌,我根本没有时间进行成熟的爱好项目。因此,从一开始,我就决定我准备用手头的任何组件来雕刻我的乐器,如果这样可以加快速度的话。此外,目前我承诺仅实现绝对最少的功能,这是绝对不可能做到的。

数据格式和页面保存

网页应该以什么形式存储在磁盘上?考虑到之前制定的要求,在我看来,选择很小:要么是“整个网页”保存格式,即主要的 HTML 文件和包含相关资源的文件夹,要么是 MHTML 格式。第一个选项对我来说似乎不太可取:磁盘上有一堆垃圾文件没有什么乐趣,您需要从中提取重要文档,在搜索时过滤掉不必要的文档,并在复制时监视完整性。当我尝试使用 TagSpaces 时,我必须重新保存所有文档,以便资源文件夹的名称以点开头:然后系统将它们识别为“隐藏”并且不显示它们。

这个问题在 myBase 中是隐藏的,因为所有内容都存储在数据库中,但在我的例子中,简单原则占了上风:我真的想将所有内容作为常规文件存储在磁盘上,这样我就不必处理复制、重命名、删除和同步等常规操作。

MHTML 格式正在经历艰难时期。保存 MHTML 的简单方法 今年夏天被 Chrome 踢出,而且我什至不知道这些页面现在应该存储在哪里?显然,机会还没有消失,还有第三方扩展,但总的来说,这是某种不好的迹象。另外,保存为 MHTML 格式 Chromium 嵌入式框架不支持,这也没有增加乐观情绪。

与此同时,我开始寻找一种简单的方法来将浏览器中的页面保存到指定的文件夹中。结果,这两个问题都得到了解决,损失很小:我遇到了一个很棒的项目 单文件,能够将网页内容保存在单独的独立HTML文件中。这是通过将所有关联资源转换为 base64 格式并将它们直接嵌入到 HTML 中来完成的。当然,文件大小会增加,内容看起来有点混乱,但总的来说,这种方法对我来说似乎可靠且简单,我就选择了它。

SingleFile 同时作为浏览器扩展和命令行应用程序出现。现在我只使用扩展程序:非常方便,除了您必须手动选择目标文件夹进行保存。将来,我可能会尝试改进应用程序以简化此过程。要从 Chrome 调用第三方应用程序,您可以使用扩展程序 外部应用按钮 - 这是我的另一个有用的发现。顺便说一句,该应用程序已经很有用了:在它的帮助下,我将 TagSpaces 中的一组文件夹和文件转换为一组独立的 HTML 文档。

GUI 和浏览器出现问题

我发现 Python 适合各种简单的文件和字符串操作,并且因为我的一个工作项目使用 小部件, 选择 蟒蛇 作为一个主要框架似乎是合乎逻辑的。

此外,在看到了在其他程序中显示页面的足够问题后,我得出的结论是,处理这些问题的唯一可靠方法是在基于现代浏览器(即 Chrome 或 Firefox)的程序中引入可视化工具。

我必须承认,上一次我不得不做这样的事情是大约 15 年前,我没想到会遇到任何陷阱。事实证明,“仅仅将浏览器打在表单上”是不可能的:不知何故,人类无法可靠且普遍地应对这项任务。表单上的某种列表框或按钮可以放置在任何GUI框架中,甚至可以生成跨平台代码,在我看来,在2019年,HTML显示也应该是一个普遍解决的问题。

事实证明,例如在 wxWidgets 中,标准的“浏览器”组件是对系统相关的“浏览器”组件的跨平台封装,在这种情况下 Windows例如,意思是 Internet总管7的以及……的情况 Windows Forms 也好不到哪里去,而且 IE9 之后的版本只能通过相当复杂的操作才能访问。 注册表操纵。正如你所看到的,我并不是唯一一个在过去 15 年里一直在做其他事情的人——这里也没有任何改变。

然后我面临一个选择:更改框架或寻找浏览器的替代组件。犹豫之后,我决定先尝试第二条路,很快就遇到了这个项目 CEF Python:Chromium 嵌入式框架的 Python 绑定,专为将 Chromium 嵌入到 Python 应用程序中的任务而设计。

评估形势:Python是世界上最流行的编程语言之一,Chrome本质上是浏览器市场的垄断者。同时,CEF Python实际上是有能源支持的 一个人、力量和健康给他。难道真的没有人需要这个了吗?

然而,CEF Python 最终并没有帮助我:尽管坦率地说,即使是项目存储库中与 wxWidgets 集成的基本示例也存在缺陷,但我尝试对其进行更多修改,但无法解决出现的所有问题。我什至不会深入探讨这个话题;它几乎不值得。

我更详细地研究了基于 Chromium 嵌入式框架的组件,最后决定尝试一下 C# 版本因为我几乎一直都在和……一起工作 Windows放弃跨平台支持的前景并没有真正困扰我。

起初难免有些波折,但之后进展迅速:CefSharp 和 Windows 事实证明,表单功能非常成功,我能够轻松解决大部分技术难题。

关于未尝试过的

您还可以尝试使用组件将 FireFox 实现到 C# 应用程序中 盖克克斯,但我对他无话可说。 Qt 框架的标准浏览器组件称为 QWeb引擎视图 成立 关于铬,所以它可能会像 CefSharp 一样工作。

Qt 的粉丝可能会忍不住评论道:如果他们采用了 Qt,就不会有任何问题了。这可能是真的,但是在为 Python 或 C++ 中的应用程序选择 GUI 框架时,可以考虑 wxWidgets,如果不是第一个选项,那么就是第二个选项。以我的拙见,像浏览器这样的东西应该内置到任何或多或少开发的 GUI 框架中,而不需要手鼓跳舞。

网络图书馆

不过,让我们回到我的申请,其工作标题是 网络图书馆。今天看起来(鼓声)是这样的:

“我稍后再读”:离线网页收藏的艰难命运

除了 干净简洁的界面 这里只实现了最基本的功能:

  • 将系统中任意指定的目录显示为文档库。
  • 在浏览器窗口中查看文档。以通常方式(光标键、PgUp、PgDn、Home、End)浏览列表,使用 Space 和 Shift+Space 键滚动浏览器。
  • 重命名文档。
  • 使用热键将文档标记为已读或收藏。
  • 按任何字段对文档进行排序。
  • 当库文件夹中有任何更改时刷新应用程序窗口。
  • 退出时保存窗口设置。

所有这些看起来似乎都是微不足道的功能,但是,比如说,仍然不支持在 TagSpaces 中保存列大小 - 显然,作者有其他优先事项。

状态(已读/最喜欢)仅存储在文件名(已读文件 doc.html 重命名为 doc{R,S}.html)。没有这样的同步,但我只是将库保留在 Dropbox 中 - 毕竟,它只是一个包含文件的文件夹。

仍有计划改进简单的事情,例如移动和删除文件,以及实现任意标签的标记。如果有人愿意提供帮助,我会很高兴。

发现

种类。正如我从一开始就说过的,一个人的工具包与另一个人的工具包有多么不同,真是令人惊讶。使用像 WebResearch 这样的工具对我来说很自然,而且由于没有它,我几乎感到身体不适。同时,显然我很少有志同道合的人,否则寻找类似物也不会有问题。另一方面,类似的情况也发生在更主流的软件上:例如,微软不打算更新桌面版 OneNote,所以我被迫使用 2016 版本,迟早我也必须从它在某个地方。

同样令人惊讶的是,驾驭当前的库和框架环境是多么困难。在我的工作中,我很少需要从头到尾编写桌面应用程序,并且我认为任何编程语言的任何工具都适合我的任务(一个窗口,三个组件,琐碎的交互)。所以我们什么都可以做,并在几天内完成。

事实证明,现实远没有那么仁慈,你可能会突然遇到问题。假设我有两个可用于拉伸浏览器窗口的拆分器。因此,在加载到 wxWidgets 后恢复它们的位置是极其困难的,因为系统在几乎所有可用的事件发生后将它们置于默认位置,并且我必须进行各种黑客攻击才能实现我所需要的。谁能想到呢?

另一方面,很明显,在 Windows Forms 是为企业界面设计的。我需要的几乎所有功能都开箱即用:保存和恢复应用程序设置、用户友好的组件界面(例如,我没想到 TreeView 组件可以查询从根元素到任何子元素的完整路径,并将其作为字符串返回),以及文件夹内容更改跟踪器等高级功能。

无论如何,时间没有浪费,结果也算圆满,人生还求什么呢,不是吗?

来源: habr.com

为具有 DDoS 保护、VPS VDS 服务器的站点购买可靠的主机 🔥 购买具备 DDoS 防护的可靠网站托管服务,包括 VPS 和 VDS 服务器 | ProHoster