mshtml操作问题

ggw 2015-07-27 04:19:22
这几天在网上查找一些mshtml操作IE窗口方法。本人的目的是自行写一个C# Forms程序,模拟点击IE窗口的链接。
问题:
1.对于存在多个且嵌套的frame,如何判断其下载完成?
2.点击一个链接后,出现一个新的IE窗口,此窗口与主线程什么关系?
我用F12找到了各个元素,但点击操作无法完成。可能是程序执行太快,与窗口下载不同步。有什么好的办法保持我所下载的窗口完成?
...全文
273 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
失落的神庙 2015-08-28
  • 打赏
  • 举报
回复
IEBrowser.isbusy 可以判断浏览器状态。
ggw 2015-08-28
  • 打赏
  • 举报
回复
引用 3 楼 wawd74520 的回复:
iframe 是可以在 这个 IWebBrowser2中找到的。 你仔细查查 可以试试这样。
  public IHTMLElement GetALL_ByName_And_Text(string Namestr, string Textstr, bool contains)
        {
            object index = 0;
            try
            {
                for (int y = 0; y < ((HTMLDocument)IEBrowser.Document).frames.length; y++)
                {
                    index = y;
                    foreach (IHTMLElement i in ((HTMLDocument)((HTMLWindow2)
                        ((HTMLDocument)IEBrowser.Document)
                        .parentWindow.frames.item(ref index)).document)
                        
                        .getElementsByTagName(Namestr))
                    {
                        if (contains && i.outerText != null && i.outerText.Contains(Textstr))
                            return i;
                        else if (contains && i.outerText != null && i.outerText.Contains(Textstr))
                            return i;
                        else if (!contains && i.outerText != null && i.outerText == Textstr)
                            return i;
                        else if (!contains && i.innerText != null && i.innerText == Textstr)
                            return i;
                    }
                }


               
            }
            catch { }
            return null;
        }
非常感谢!大侠。 可能我的问题表述不清。具体说是这样的: 本人的目的是写一个Form程序,来模拟鼠标的点击。从网上找到一些点击器,大部分是用于游戏或刷屏的。也有介绍这个mshtml的,我就参考此类程序编写一个点击程序,定时处理浏览器中出现的需要处理的问题。 可是,这个网站大部分的点击是出现新的窗口,而不按照逻辑点击一遍控件就完事的。有此连接点击后会打开一个新的窗口,接下来就要在新出现的窗口点击,这些网页都是嵌套frame的,并且有许多内容。 我用F12找到各个控件或连接,用Invokemember("click")或(control).click()进行了点击。但程序执行太快,我没有找到用什么办法知道新窗口已下载完成,所以,就用while等待某个控件已找到,就认为是下载完成了。 现在出现的问题是:第一次点击出现新窗口,我找到了,且处理完成,第二次循环开始了,就找不到这个新窗口了。用的办法就是新窗口标题上含有某个特殊的串。这个串没有问题。我跟踪到第二次,但发现IWebBrowser2.Document.Title没有变化。 不知道为何? 另外,想知道从一个Form程序中,怎样知道新窗口下载完毕及点击 窗口按钮后,新引起的下载何时下载完成? 搞个异步事件?
ggw 2015-08-28
  • 打赏
  • 举报
回复
谢谢!我再想法试一试。 实际是 编写一个无人值守程序,间隔一段时间就处理一下。可这个处理过程有点长,且在新窗口中进行。
失落的神庙 2015-08-24
  • 打赏
  • 举报
回复
iframe 是可以在 这个 IWebBrowser2中找到的。 你仔细查查 可以试试这样。
  public IHTMLElement GetALL_ByName_And_Text(string Namestr, string Textstr, bool contains)
        {
            object index = 0;
            try
            {
                for (int y = 0; y < ((HTMLDocument)IEBrowser.Document).frames.length; y++)
                {
                    index = y;
                    foreach (IHTMLElement i in ((HTMLDocument)((HTMLWindow2)
                        ((HTMLDocument)IEBrowser.Document)
                        .parentWindow.frames.item(ref index)).document)
                        
                        .getElementsByTagName(Namestr))
                    {
                        if (contains && i.outerText != null && i.outerText.Contains(Textstr))
                            return i;
                        else if (contains && i.outerText != null && i.outerText.Contains(Textstr))
                            return i;
                        else if (!contains && i.outerText != null && i.outerText == Textstr)
                            return i;
                        else if (!contains && i.innerText != null && i.innerText == Textstr)
                            return i;
                    }
                }


               
            }
            catch { }
            return null;
        }
ggw 2015-08-24
  • 打赏
  • 举报
回复
现在本人已完成点击出现新的窗口,用shell找到新的窗口,但,第二次用窗口的标题就再也找不到出现的窗口了。 具体是: 用SHDocVw.ShellWindowsClass(),得到到打开的窗口,循环窗口.count,将其转换成SHDocVw.IWebBrowser2, 如果是iexplore窗口,则用此类的Document.Title判断是否含有某个串。就在此循环到第二次时,就出错了。第一次可以找到,并完成处理。 有用过mshtml的大侠,说说,谢谢!
  • 打赏
  • 举报
回复
iframe.onload事件
因为Win98拥有目前主流的系统功能,在游戏娱乐,程序开发,图形设计都有不错的表现,也是几乎每个人计算机都有的操作系统。但由于这样或者那样的种种问题,使的Win98并没有像Win95那样有着长久的持续性。现在很多人都在使用WinXP的新型系统,的确,激动人心的功能的确很多,但由于系统要求高,真正要很好地跑动它,256MB内存,PIIICPU才够,庞大的系统加上高内存的占用,真能让你再去很好的运行大型软件[3DMAX,PS,CSGAMES]就仅仅256MB内存显然不够了。我们知道,内存是重要的提高性能的手段之一,只有使用占用内存少的系统才可能保持系统的稳定,和高性能。从所有的Win9X家族挑选,Win98显然是最符合我们要求的。既能具备目前最流行的系统功能,又能有较少的系统占用,是非常符合个人电脑系统规范的。其实在实践中,我们发现Win98Bate2是个具有95的系统效率,Win98的系统功能,一个非常不错的系统,但因为是测试版,有很多的问题以及官方限制。正因为如此,系统的小巧,与功能的强劲成为我们追逐的目标,我们既不是微软的崇拜者也不是微软的反对者,我们只要求自己运作的系统更高效而稳定,我们是一群DIY的狂热者,通过自己的努力和追求,使的Winfows9XPlus就此孕育而生。此系统本来是针对老鸟级用户群的,但由于写了详细说明,使的新手同样适用。 下面我们来看一下这个系统被DIY的主要功能分析: 1:众所周知,Winfows95OSR2开始了捆绑IE浏览器,这样使的系统比原Winfows95要增大不少,对内存的要求又进一步提高,直到现在,很多人都愿意去自定义IE是否安装卸载,现在Winfows9XPlus能让你梦想成真,你不仅仅能随时自定义安装卸载IE,而且你还能自定义安装卸载Win98的MSHTML核心,MSHTML核心对系统资源占用很大,使的系统启动速度慢,所以,仅仅卸载IE是不够的,要彻底还原成系统本身速度,必须要把附加的MSHTML核心卸载。因此Winfows9XPlus不仅能够完全清除IE,还能完全清除掉MSHTML核心文件。以下这些卸载都是经过很多实践,才保证非常的安全和稳定的。同时更有意义的是,由于没有MSHTML的核心支持,网络上所有针对IE的网页病毒都将对此系统无效,同时没有MSHTML核心文件,就像一个纯操作系统一样,拥有高速,和极低的系统资源消耗。你完全可以自定义安装第三方优秀的网络浏览器,如Opera,网景等。 2:完全清除了Win98自带的老版本DIRECTX的核心文件,系统不带任何的DIRECTX核心文件。这样你能安装真正干净的DIRECTX8.1新核心,我们都知道,DIRECTX是不可能卸载的,所以世面上卸载DIRECTX工具,并没有清除DITECTX的核心文件,只是对注册表做了版本修改而已,才使的你能够安装老版本DITECTX。即使是DIRECTX本身新版本升级安装也是覆盖式安装,而不是卸载式安装,一些老版本的文件,依然存在于系统和注册表,给系统的运行和执行效率造成隐患,平时玩3D游戏莫名其妙的死机也有可能是这样造成。 3:对Win98进行了大量修改以及优化,使的新的Winfows9XPlus系统仅仅只有60-70MB,仍然不失去扩展性以及功能。Winfows9XPlus系统的缩减不是以废除功能为代价,这与其它的WIN系统缩减有着根本的区别,同时我们又做了很多优化,和修改,使的它的系统资源占用极少,完全能够再现过去Win95系统高效的辉煌。基与98第一版的Winfows9XPlus开机系统完全进入内存仅仅占用内存24MB,基于98第二版的Winfows9XPlus开机仅仅占内存32MB,至始至终,要比正常的Win98系统占用的内存要少很多。本系统和原Win98系统功能完全一样,你完全能够正常安装基与Win98系统的驱动和软件工具。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧