纽约 时报 浏览器






1.11/5 (35投票s)
2003年12月9日
9分钟阅读

107879

273
“纽约一分钟” 是对生活方式的形容。 <br>这是一个快节奏的世界。我们需要所有我们能负担得起的节省时间的电器。
-
下载演示项目 - 56 Kb 通过脚本过滤器选项可实现真正的离线 NYT 浏览模式。新版本 1.04 会将解析后的文档与网站根目录下的相对图像一起保留。这是为了准备发布一个版本,该版本将允许用户将导出映射到可移动媒体。12-31 截断了 NYTimes 页面末尾的垃圾信息。(保存前杀死它就解决了。)过滤 CGI 查询,留下一个相当干净的纽约时报页面版本,不会提示连接。加载速度也很快。捕获了使用外部小程序以及根域中不存在小程序时发生的错误。这对于其他网站也会有所帮助。添加了对嵌入式 HTML 片段的支持。添加了对最大化视图的支持。正在考虑为“嵌入式 html”片段添加解析器支持。IE 会创建带有所有文件的少量子文件夹。设计者将 html 片段的名称放入图像源标签中。我只需要重做已实现的功能,保留 HTML 中的文件夹标签并将文件夹复制到图像文件夹。
引言
“纽约一分钟”是对生活方式的形容。在一个快节奏的世界里,我们需要所有我们能负担得起的节省时间的电器。通过自动化其内容保存功能,“纽约时报浏览器”减少了花费在归档在线内容上的压力。它还提供了提供复杂归档和检索选项的信息服务。为不那么精通技术但原本访问受限的用户打开了广阔的使用空间。
在演示应用程序中,点击“纽约时报”页面索引中的链接,等待其加载,然后点击保存按钮。演示应用程序已使用请求为您预配置了文件夹。请随意浏览网站,按需保存页面内容。现在,正面页面上的链接已转换为访问主页面子文件夹中的存档内容。(存档功能应适用于 99% 的网站。CNN 是已知的例外。)
背景
“一天早上,我发现自己坐在笔记本电脑前。我在纽约市某个地方的一家时髦的快速互联网咖啡馆喝咖啡和甜甜圈。离机场只有三十分钟路程,我想下载
《时报》在飞往加州的早班飞机上阅读。(这次我遇到了一位非常好的女孩,所以我想看看有没有工作。很难相信我找不到一份纽约市的面对面工作,但没有学位,以我的年龄,你必须做他们仍然让你做的任何事。)我提前 5 分钟赶上了航班。在飞行的大部分时间里,我离线访问整个“纽约时报”版块,这不仅引起了其中一位空乘人员的兴趣,也引起了过道的西装革履男士的兴趣。我甚至把电脑递给他一次,让他看了一下。”
嘿,别以为我只是写了这个浏览器来获取报纸。我没有。我其实在旅行前几周就写好了。放轻松。”
我曾经赚取丰厚的加州薪酬,用
Perl
从一个 WWW 电子商务数据库中提取信息。那项工作自动化了产品信息的获取以及在线数据库的合并。“纽约时报浏览器”确实具有类似的功能。然而,它的目的是为了实现便携式离线 WWW 应用程序(如笔记本电脑)。“纽约时报浏览器”是我最初使用 VB6 Browser 控件对象尝试自动化的尝试。在尝试了可用的事件和返回值之后,我设法在 Visual Basic 中配置了一个可靠的条件,用于指示何时加载了即使是复杂得多的页面。另外,我发现可以通过操作 IE 注册表设置来设置用户保存路径。这使得“纽约时报浏览器”可以专门用于归档 WWW 内容,从而更容易获取和管理。
方法使用
document_complete
检测算法在下载中的一个缩减测试项目中有所体现。
当两个返回的progress
值的比率为unity
时,一个document
就符合测试条件。检测还使用一个全局enable
设置,使code
更高效,仅在大部分文档加载后才启用测试。确定它已加载是一个composite
指示,在所有指示器都为True
时获得。我还发现将返回的 pDisp 值与最顶层的浏览器控件进行匹配至关重要。(文档暗示加载时预期为 null 指示器,这似乎具有误导性。)经过更多细化,我决定进度指示器是相对的,因此我将其降至 .5 的比例作为启用测试的粗略限定。效果好得多!测试 unity 太严格了。伪代码
Dim progress1, progress2 As Long Dim enable As Boolean Dim loaded As Boolean Do While loaded = False Do While progress1 / progress2 > .5 'Works much better. enable = False Loop If enable = True And pDisp = WebBrowser1 Then RaiseEvent Document_isloaded loaded = True End If Loop
在此应用程序中,文档加载后,将由 Microsoft IE 默认保存函数保存。ExecWB
saveas 命令使用OLECMDEXECOPT_DODEFAULT
标签来保存全部内容。然后可以开始处理以进行归档,加载索引文件并修改嵌入式链接,使其访问其他存档页文档。根据“纽约时报”使用的虚拟路径名,文件夹结构的维护是自动化的。存档文件夹名称源自页面请求中使用的文档路径。
见解
我还没有完成 BOWSER 应用程序的编码。这需要一些研究微软对 WebBrowser 功能的限制。虽然无法在没有对话框的情况下保存页面,但我仍然认为该应用程序将很有用,它能为用户提供存档会话,并在捕获信息的同时浏览信息。关于链接,以及何时/如何将它们转换为查询存档页面,仍然是一个问题。用户可能希望同时维护一个在线索引文件和一个离线版本(用于浏览存档)。
在我的研究中,我发现可以修改已加载的 HTML 文档并修改后保存。我最初的测试是在保存之前修改了文档中的标题。虽然 WWW 浏览链接引用的是页面文件名,但 IE 默认使用页面标题来保存文档。因此,离线多页文档会中断,除非您能 a.) 保持在线 b.) 覆盖 IE 的机制。这将是我下一篇 Web BOWSER 文章的主题,《咬一口。< ^v^v^v^ >》
有趣的点
微软的文档对象模型假设开发人员将拥有相同的
测试中的容错功能。他们让 IE 保存文档,需要对图像进行一些重命名/转换。我见过 IMG/GIF 和 JPG/JPEG 重命名。问题是文档对象模型保留了与原始下载相同的图像列表
。我本以为重新加载文件时它会改变,但是
有一个与之关联的列表,该列表不会随着严格的
名称而更新。微软使用松散的命名,并期望开发人员也这样做。
如果能解释清楚就好了,但这是你需要
亲身体验才能学到的东西。这似乎有点坏消息/好消息,微软的 IE 保存功能并不支持保存复杂文档中的所有图像(appears 是关键词)。寻找丢失的文件需要像 BOWSER 这样的程序来注意到差异。当文件丢失在保存文件夹中时,我会收到错误,因此我可以进行分析。解决方案可以是使用 DOM 从缓存中获取它们,在确定它们不存在于 IE_files 文件夹后获取 URL。否则,则需要下载它们。
我发现可以使用定时器来抑制应用程序启动时的 document_complete 事件过程。定时器执行延迟后,is_loaded 状态更改为允许事件过程执行。
微软插入了一个过滤器来修复 HREF 内容,如果引用最初使用另一个标签,则会将正斜杠转换为反斜杠。 我只替换了根部分,下次访问文件时发现所有斜杠都被切换了。(我还需要验证此行为。)
看起来可能可以封装一个静默浏览器,使用它来获取页面而无需用户提示。
ExecWB
saveas 命令与默认的OLECMDEXECOPT_DODEFAULT
保存模式可以在静默模式下抑制提示。这对于导航到索引后的应用程序的下一个扩展将是理想的。开发正在向前推进。除了测试“静默”模式之外,我还在研究使用 TCP 套接字控件来查询文件列表。这将有可能消除 IE 每次保存时创建的多个图像子文件夹。
历史
(抱歉,我不发布演示漏洞应用程序的全部源代码。)
感谢您查看我的VB 代码。
好好生活。-Q
o0O0o
-PS. "Lou Dobbs 最近怎么了?"
参考文献
1. RIP - "提取自来源"
更新
- 最初的演示漏洞应用程序上传中有一个小错误。某些目录会因数组变量越界而引发异常。已修复。还添加了一行来抑制弹出窗口。12-9 凌晨 4 点 CST
- 12-9 添加了一行来初始化默认根保存路径为“c:\__Internet”
- 12-9 还自动化了链接转换,以便链接在导航已保存的存档时工作。(现在每个人都需要这个。)哇——它“仍然是测试版”。
- 添加了演示项目的源代码。30Kb
- 12-12 修复了链接编辑并增大了导航窗口。添加了 SAVE 按钮。链接编辑使用 DOM 获取链接并将其替换到离线 HTML 中。
- 12-15 版本 1.0.1 取得了巨大进步。它工作得相当好。下一个版本可能会看到自动化链接处理,并使用爬虫来无人值守地获取索引页面的内容。
- 12-16 更多修复,支持文件夹中的多个文件名,启动时添加延迟以禁用保存,清除了外部链接以消除离线浏览期间的大部分连接提示。
- 12-17-2003 (捕获了 IE 保存对话框的一些问题。Abort 不会覆盖现有离线文件,除非在线版本比 20 秒更新。Abort 保存不再崩溃。还修复了 URL 解析器,以便在缺失时添加所需的“/”。现在您可以使用:http://nytimes.com/ 并且它会起作用。)
- MAJOR 重构-命名使用整个 URL。还设置了链接分析和查询构建方法,并设置了树深度以打开一个限制性窗口,用于限定新查询。
- 12-23 解决了图像重命名问题,无需在 IE SAVE 后重新加载图像。因此,DOM 不准确,需要进行修补才能允许微软对文档进行操作。我发现他们将 IMG 文件重命名为 GIF,并将 JPG 重命名为 JPEG。长期的解决方案可能是重新加载已保存的版本,重新断言其 DOM。从缓存中读取每个文件是不切实际的。目前我意识到图像命名问题,这也可以通过根据微软约定快速重命名所有 DOM 图像来解决。然后可以删除补丁。
- 发生了几次更新。BOWSER 非常稳定,现在可以正确复制 Java 小程序,并在可能的情况下处理 IE 保存的 FLASH 转换。解析现在是单遍完成的。
- 添加了对 RESIZE 的支持。
- 使图像相对于根目录。
- 添加了可选脚本过滤器。(移除所有脚本的选项。)解析后的 NYT 不会提示连接。
已知问题:如果站点已使用 BASE REF:则 BOWSER 不起作用。我需要 编程支持它。