从另一个应用程序获取浏览器的当前HTML

时间:2009-12-29 18:42:58

标签: html automation

我正在尝试构建一个读取的应用程序 - 最好是检测(通过事件或smthg之类的) - 浏览器当前的HTML。

我的主要目的是构建某种功能,允许对某些页面进行单点登录,因此我需要知道每次页面完成加载以检查HTML并设置一些字段值,例如。

我知道不同浏览器的实现可能会有所不同,但IE和/或Firefox将是一个很好的开始。

即使是谷歌搜索我也无法接近我怎么能实现这一目标。我想也许,但也许,我可以使用Windows API将某种控制附加到浏览器的窗口,但我试图相信(至少现在,至少)有更容易的东西。 :)

任何想法都会非常感激。

此致

菲利普

5 个答案:

答案 0 :(得分:3)

从外部应用程序执行此操作将是一项异乎寻常的任务。您必须设置几十个最复杂的查询机制,并可能会被安全措施关闭。像这样的东西是浏览器扩展的用途。

另外,即使源代码已完全加载,它仍然不意味着页面已准备就绪。在扩展中,您只需挂钩onLoad事件并拥有一个干净,正确解析的DOM。

也许可以编写一些扩展,每个浏览器一个扩展,并让这些扩展与您的应用程序通信。这样,它实际上可以很容易。扩展将监听onload事件,然后为您传递所有HTML。 (这是一个主要的隐私问题,无论你采用哪种方式,因为HTML可以包含各种各样的东西,但这是一个不同的故事)。是否可以完成,取决于扩展模型是否允许与外部流程进行通信。

答案 1 :(得分:1)

我猜这是一个更直接的方法,但是Greasemonkey呢?您可以编写一个GM脚本来抓取当前页面的HTML,然后通过Ajax将其发送到您的应用程序(当然,您的应用程序必须运行一个小型HTTP服务器)。如果GM太有限,你也可以编写一个Firefox扩展,为你提供更复杂的选项。

答案 2 :(得分:0)

要使用Internet Explorer执行此操作,您必须构建一个浏览器帮助程序对象,以挂钩浏览器发布的有关当前页面处置的事件。这绝不是一项微不足道的任务,需要大量的Windows特定编程。我不相信没有写BHO是可能的,技术上,BHO是'在应用程序内部',因为你必须将它安装到IE中。

Browser Helper Objects

答案 3 :(得分:0)

如何创建本地代理?有一个名为Proxomitron的广告过滤应用程序,可以作为您的模型。

答案 4 :(得分:0)

我在使用ShDocVw(Microsoft Internet Controls)的Internet Explorer中找到了一种方法:http://msdn.microsoft.com/en-us/library/aa752044%28VS.85%29.aspx

ShDocVw包含一些允许您监视现有和新浏览器导航的类(docCompleted,download等)。下一步是弄清楚如何写入DOM(可能它非常直接,我还没有尝试)。

Firefox将是另一部小说,但IE现在已经足够......:)

谢谢大家。

菲利普