解决了送上所有可用分,高分送高手
我在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




