CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

解决了送上所有可用分,高分送高手

楼主lovevsnet(编程一把手)2005-10-08 21:20:03 在 .NET技术 / C# 提问

我在codeproject   上问了一个问题  
  现在也想请我们的同胞来帮忙一下  
  我可用分1000多吧  
  http://www.codeproject.com/script/comments/forums.asp?forumid=1649&select=1248303&msg=1248303  
  就是如何解决IHTMLElementRender的转换的问题  
  此问题针对InternetExplorer,或IWebBrowser2的body  
  将网页保存为图像  
  不要给我codeproject上的WebPageToImage_src链接:  
  这是用API的,我看也没看,因为我不只是为了保存页面,还要保存网页上元素为图片  
  我用WebBrowser已经实现  
  http://blogs.msdn.com/rfarber/archive/2004/10/12/240943.aspx上好象也不行  
  贴一下自己代码:  
  InternetExplorer   ie=new   InternetExplorer();  
  object   v1="",v2="",v3="",v4="";  
  ie.Visible=true;  
  string   strUrl="http://blogs.msdn.com/rfarber/archive/2004/10/12/240943.aspx";  
  ie.Navigate(strUrl,ref   v1,ref   v2,ref   v3,ref   v4);  
  Thread.Sleep(5000);  
  IHTMLDocument2   idoc=(IHTMLDocument2)ie.Document;  
  //IHTMLElement   el=(IHTMLElement)idoc.body;  
  //IHTMLElementRender   ren=(IHTMLElementRender)el;//抛出转换错误System.InvalidCastException  
  IHTMLElementRender   ren=(IHTMLElementRender)idoc.body.GetType().GetInterface("IHTMLElementRender",true);//这里ren返回null  
  ..... 问题点数:100、回复次数:28Top

1 楼metababy(花纯春)回复于 2005-10-09 16:29:40 得分 5

我作不了,但是,帮你顶上去Top

2 楼lovevsnet(编程一把手)回复于 2005-10-10 20:51:35 得分 0

期待高手出现,分无所谓  
  只求问题解决!Top

3 楼lovevsnet(编程一把手)回复于 2005-10-11 13:46:32 得分 0

为什么IHTMLDocument2   idoc=(IHTMLDocument2)axWebBrowser1.Document;  
  下面同样代码就行,IWebBrowser2.Document转换成IHTMLDocument2后就无法将idoc.body转化成IHTMLElementRender呢?  
  上面的ie.Document就是接口IWebBrowser2的DocumentTop

4 楼lovevsnet(编程一把手)回复于 2005-10-14 11:47:48 得分 0

CSDN上没高手了,怎么就没人帮忙呢?  
  思归,速马不知道能不能解决?  
  速马兄弟E文不错,帮偶到老外网站上找找Top

5 楼prochf(love bcb)回复于 2005-10-19 12:42:34 得分 5

这问题是不好办,帮顶一下,希望有高手出现Top

6 楼lovevsnet(编程一把手)回复于 2005-10-29 07:52:37 得分 0

唉,看来问题是没人解决得了了  
  自己顶一下,希望高手抽空指点一下,不胜感激!Top

7 楼jxufewbt(我的目标是5星)回复于 2005-10-29 08:22:23 得分 5

upTop

8 楼lovevsnet(编程一把手)回复于 2005-11-04 09:12:35 得分 0

为了让我的可用分清0,也为了增加您的专家分,化些时间帮忙一下吧!Top

9 楼tiaoci(我挑刺,我快乐)回复于 2005-11-04 10:09:28 得分 30

show   me   the   money.  
   
  你有看那个连接下面的答复吗?  
   
  以下转-------  
   
   
  I   tried   this   real   quick   and   it   works.   I   threw   together   a   form   with   an   IE   control   and   a   panel.   There   is   an   issue   with   import   of   the   MSHTML   interface   so   just   redeclare   it   locally   and   you   will   have   no   problems.   If   render   is   null,   you   may   have   a   frame   to   deal   with.    
   
  using   System;    
  using   System.Drawing;    
  using   System.Runtime.InteropServices;    
  using   SHDocVw;    
  using   mshtml;    
   
  namespace   ScreenGrab    
  {    
  [    
  Guid("3050f669-98b5-11cf-bb82-00aa00bdce0b"),    
  InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown),    
  ComVisible(true),    
  ComImport    
  ]    
  interface   IHTMLElementRender    
  {    
  void   DrawToDC([In]   IntPtr   hDC);    
  void   SetDocumentPrinter([In,   MarshalAs(UnmanagedType.BStr)]   string   bstrPrinterName,   [In]   IntPtr   hDC);    
  };    
   
  public   class   IEElementCapture    
  {    
  private   IWebBrowser2   webBrowser   =   null;    
   
  public   IEElementCapture(IWebBrowser2   webBrowser)    
  {    
  this.webBrowser   =   webBrowser;    
  }    
   
  public   bool   Capture(ref   Graphics   g)    
  {    
  if   (   null   ==   webBrowser   )    
  {    
  return   false;    
  }    
   
  IHTMLDocument2   htmlDocument   =   (IHTMLDocument2)   webBrowser.Document;    
  if   (   null   !=   htmlDocument   )    
  {    
  IHTMLElement   bodyElement   =   (IHTMLElement)   htmlDocument.body;    
  if   (   null   !=   bodyElement   )    
  {    
  IHTMLElementRender   render   =   (IHTMLElementRender)   bodyElement;    
  if   (   null   !=   render   )    
  {    
  IntPtr   memDC   =   g.GetHdc();    
  render.DrawToDC(memDC);    
  return   true;    
  }    
  }    
  }    
   
  return   false;    
  }    
  }    
  }    
  Top

10 楼zhangjidong(简单生活)回复于 2005-11-04 10:10:12 得分 5

高手,up一下。Top

11 楼lovevsnet(编程一把手)回复于 2005-11-06 21:31:22 得分 0

to   tiaoci(我挑刺,我快乐:  
  你的回复我早在网上看到过,也就是我上面提供的网址:  
  http://blogs.msdn.com/rfarber/archive/2004/10/12/240943.aspx  
  对axWebBrowser可行  
  但对nternetExplorer就不行  
  nternetExplorer.Document时就无法转换  
  axWebBrowser.Document转换成IHTMLDocument2后的body能转换成IHTMLElementRender  
  而nternetExplorer.Document转换成IHTMLDocument2后的body无法转换成IHTMLElementRender  
  会抛出异常  
  请抽空帮忙测试,  
  也请高手继续帮忙!Top

12 楼redwolf_123(雨恨云愁)回复于 2005-11-07 00:48:42 得分 5

帮你顶。Top

13 楼lovevsnet(编程一把手)回复于 2005-11-16 13:15:00 得分 0

怎么还是没人帮得了忙?  
  我找了那么久还是无法解决  
  自己顶,期待高人出现Top

14 楼feiyun0112(http://feiyun0112.cnblogs.com/)回复于 2005-11-16 14:49:33 得分 10

好像InternetExplorer根本没实现那个接口Top

15 楼lovevsnet(编程一把手)回复于 2005-11-20 07:19:25 得分 0

哪位高手对InternetExplorer接口比较熟一些,请抽空帮忙一下,谢了Top

16 楼lovevsnet(编程一把手)回复于 2005-11-26 13:52:10 得分 0

再顶,直到把CSDN顶破为至Top

17 楼s5689412(华君)回复于 2005-11-26 21:23:39 得分 30

http://mack.cnblogs.com/archive/2005/11/10/189520.html  
   
  不一定符合你用,这个工具可以指定网页地址,然后抓取,觉得不错,贴一下,让更多人知道。Top

18 楼s5689412(华君)回复于 2005-11-26 21:58:35 得分 0

另外不太确定你看到这篇文章没有:  
   
  http://www.codeproject.com/internet/htmlimagecapture.asp  
   
  我都是着眼于你最原始的需求——抓取Web页面为图片,所以也许不能直接解决你现在面临的问题,抱歉。Top

19 楼s5689412(华君)回复于 2005-11-26 22:06:54 得分 0

另外你说:  
   
  不要给我codeproject上的WebPageToImage_src链接:  
  这是用API的,我看也没看,因为我不只是为了保存页面,还要保存网页上元素为图片  
   
  但是那个程序不能“保存网页上元素为图片”吗?  
  我倒是觉得那个程序的问题在于使用了PrintWindow函数,而这个函数是WinXP以上的系统才有的,不具有太好的通用性(比如在我的Win2000上就没法测试这个程序)。Top

20 楼lovevsnet(编程一把手)回复于 2005-11-28 12:42:25 得分 0

s5689412(华君):  
  你那个链接我人,我早下载看过  
  那个功能不行远没满足我的要求  
  不过也谢谢你,  
  我想做一个网站自动登录的(不用HttpWebRequest),不用axWebBrowser控件,就直接用nternetExplorer接口打开IE,然后将网页上的验证码图像保存为文件或流,进行比较得出验证码Top

21 楼davidwzy(dvd)回复于 2005-11-28 12:46:04 得分 0

帮顶Top

22 楼s5689412(华君)回复于 2005-11-28 13:33:41 得分 0

验证码图片生成之后返回的不是一幅图片吗?  
  还要自己去抓?Top

23 楼lovevsnet(编程一把手)回复于 2005-11-28 18:48:51 得分 0

to   s5689412(华君):  
  我不是要在自己的网页上生成验证码。  
  是从别人的网页上取得验证码图片,然后进行分析  
  用InternetExplorer接口打开页面:  
  InternetExplorer   ie=new   InternetExplorer();  
  string   empty="";  
  ie.Navigate("http://passport.csdn.net/member/UserLogin.aspx",ref   empty,   ref   empty,   ref   empty,   ref   empty);  
  ie.visable=false;//找开网页但不显示IE窗口  
  IHTMLDocument2   doc=(IHTMLDocument2)ie.Document;  
  IHTMLElement   em=(IHTMLElement)doc.body;  
  IHTMLElementRender   ren=(IHTMLElementRender)em;//System.InvalidCastException  
  无法转换,但我用axWebBrowser控件时可以实现我的要求,以上转换也没问题  
  如果用axWebBrowser控件实现webPage的snapshot,那很方便  
   
   
  Top

24 楼grf601006617(宫崎锋)回复于 2005-11-28 21:03:56 得分 5

高深~   帮顶~Top

25 楼Sandy945(阿非)回复于 2005-11-28 21:18:08 得分 0

mark   ~~Top

26 楼lovevsnet(编程一把手)回复于 2005-12-12 08:50:32 得分 0

得出一个结论:  
  CSDN上没有高手,要不高手太懒,一天到晚不编程,在家睡懒觉,哈哈  
  我在CSDN上就问了这个问题,也没人会帮忙Top

27 楼lovevsnet(编程一把手)回复于 2005-12-27 09:18:03 得分 0

思归,孟子兄弟,听说你们是CSDN上的高手,你们能不能抽空来看看  
  除了你们CSDN上我还真想不出有谁能帮忙了!Top

28 楼lovevsnet(编程一把手)回复于 2006-03-04 19:51:51 得分 0

问题那么久了也没人解决,还是结贴吧,希望有能力解决此问题的高手帮忙一下,到时,另开贴送分以示谢意!Top

相关问题

  • 不只一问。。。所有可用分送上
  • 送分送分送分送分送分
  • 送分!送分!送分!送分!送分!送分!送分!送分!送分!送分!送分!
  • 散光所有可用分
  • 有什么方法能够尽快将可用分送完?
  • 所有分送上!请大虾帮忙解决这个问题.
  • 一个关于ArrayList的问题,所有分送上!!!
  • IE“不允许访问资源”问题,所有分送上
  • 本人把身上所有分送上(640)
  • 送分,送分送分

关键词

  • 转换
  • 网页
  • 解决
  • 验证
  • 接口
  • 页面
  • ie
  • 控件
  • ihtmlelementrender
  • internetexplorer

得分解答快速导航

  • 帖主:lovevsnet
  • metababy
  • prochf
  • jxufewbt
  • tiaoci
  • zhangjidong
  • redwolf_123
  • feiyun0112
  • s5689412
  • grf601006617

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo