如何获取WatiN图像元素的位图?我有一些文本字段句柄和其他元素,但我想获取位图以便将其保存在磁盘上的某个位置。如果可能的话,我需要直接从WatiN进行。我怎样才能做到这一点?前段时间我遇到了类似的问题。Watin不能直接执行此操作,但它公开了获取某些结果所需的mshtml对象。当我的代码非常像这样:usingSystem;使用System.Collections.Generic;使用System.Linq;使用系统文本;使用WatiN.Core;使用WatiN.Core.Native.InternetExplorer;使用mshtml;使用System.Windows.Forms;namespaceConsoleApplication1{classProgram{[STAThread]staticvoidMain(string[]args){Browserbrowser=newIE("http://www.google.com");IEElementbanner=browser.Images[0].NativeElementasIEElement;IHTMLElementbannerHtmlElem=banner.AsHtmlElement;IEElementbodyNative=browser.Body.NativeElementasIEElement;mshtml.IHTMLElement2bodyHtmlElem=(mshtml.IHTMLElement2)bodyNative.AsHtmlElement;mshtml.IHTMLControlRangecontrolRange=(mshtml.IHTMLControlRange)bodyHtmlElem.createControlRange();controlRange.add((mshtml.IHTMLControlElement)bannerHtmlElem);controlRange.execCommand("复制",false,System.Reflection.Missing.Value);controlRange.remove(0);if(Clipboard.GetDataObject()!=null){IDataObject数据=Clipboard.GetDataObject();如果(data.GetDataPresent(DataFormats.Bitmap)){System.Drawing.Imageimage=(System.Drawing.Image)data.GetData(DataFormats.Bitmap,true);//dosomethinghere}}}}}基本上,这个小黑客试图将图像复制到剪贴板,但我在让它工作时遇到了一些问题,最终捕捉图像周围的区域并将其保存到磁盘。虽然这可能不是很有帮助,但它可能会为您指明方向。我不认为您可以直接从WatiN获取二进制信息。但是,您有Image.Uri方法可以为您提供图像的URI。所以很容易用http请求下载。使用(Browserbrowser=newIE("http://www.sp4ce.net/computer/2011/01/06/how-to-use-WatiN-with-NUnit.en.html")){Imageimage=browser.图片[0];Console.Write(image.Uri);HttpWebRequest请求=(HttpWebRequest)WebRequest.Create(image.Uri);WebResponse响应=request.GetResponse();使用(Streamstream=response.GetResponseStream())使用(FileStreamfs=File.OpenWrite(@"c:foo.png")){byte[]bytes=newbyte[1024];整数计数;while((count=stream.Read(bytes,0,bytes.Length))!=0){fs.Write(bytes,0,count);希望这对前段时间有所帮助我还需要提取图像数据,所以我想出了这个解决方案:使用和画布在页面内创建一个隐藏字段ie.RunScript("document.body.innerHTML+="";");ie.RunScript("document.body.innerHTML+="";");使用javascript将其转换为base64并检索其值,即.RunScript("varc=document.getElementById('canv');");ie.RunScript("varctx=c.getContext('2d');");ie.RunScript("varimg=document.getElementsByName('imgCaptcha')[0];");ie.RunScript("ctx.drawImage(img,10,10);");即.RunScript("document.getElementById('hidden64').value=c.toDataURL();");然后检查编码值stringdata=ie.Element(Find.ById("hidden64")).GetAttributeValue("value");varbase64Data=Regex.Match(data,@"data:image/(?.+?),(?.+)").Groups["data"].Value;varbinData=Convert.FromBase64String(base64Data);位图im;using(varstream=newMemoryStream(binData)){im=newBitmap(stream);}希望能帮助到你:)publicImageGetImageFromElement(IHTMLElementElement){intwidth=(int)Element.style.width;intheight=(int)Element.style.height;IHTMLElementRender2render=(IHTMLElementRender2)Element;BitmapscreenCapture=newBitmap(width,height);矩形drawRectangle=newRectangle(0,0,width,height);this.DrawToBitmap(screenCapture,drawRectangle);Graphicsgraphics=Graphics.FromImage(screenCapture);IntPtrgraphicshdc=graphics.GetHdc();render.DrawToDC(graphicshdc);graphics.ReleaseHdc(graphicshdc);graphics.Dispose();returnscreenCaptureasImage;}那是我用php生成image方法的灵感来自我自己的WebBrowserClass,它扩展了webbrowser控件。(因此“this”=WebBrowser)但是我们必须导入IHTMLElementRender2接口才能使用该方法。[Guid("3050f669-98b5-11cf-bb82-00aa00bdce0b"),InterfaceType(ComInterfaceType.InterfaceIsIUnknown),ComVisible(true),ComImport]interfaceIHTMLElementRender2{voidDrawToDC([In]IntPtrhDC);voidSetDocumentPrinter([As,Marsh(UnmanagedType.BStr)]stringbstrPrinterName,[In]IntPtrhDC);};我大约1年前在网上发现了这个方法,所以如果你搜索它,你可能会找到更多信息。我想我有这个问题,但我无法解决。PHP一直在生成新图像,因此我使用了CaptureWebPageToFile()方法。以上就是C#学习教程:如何获取WatiN图像元素的位图?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
