• 有人做过FLASH验证码识别吗?


    图形验证码识别的资料满天飞,就是没见到有flash的.
    有人做过吗?给个思路.
    和图形识别没有根本区别,得到元素的IHTMLElementRender接口,调用DrawToDC画到你的Memory   DC上去。

    private void OnDocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) {
                WebBrowser browser = (sender as WebBrowser);
    
                if (browser != null) {
                    mshtml.IHTMLDocument2 document = (browser.Document.DomDocument as mshtml.IHTMLDocument2);
                    if (document != null) {
                        mshtml.IHTMLElement element = (document.body as mshtml.IHTMLElement);
                        if (element != null) {
                            IHTMLElementRender render = (element as IHTMLElementRender);
                            if (render != null) {
                                using (Graphics graphics = this.CreateGraphics()) {
                                    IntPtr hdcDestination = graphics.GetHdc();
                                    render.DrawToDC(hdcDestination);
                                    IntPtr hdcMemory = GDI32.CreateCompatibleDC(hdcDestination);
                                    IntPtr bitmap = GDI32.CreateCompatibleBitmap(
                                      hdcDestination,
                                      browser.ClientRectangle.Width,
                                      browser.ClientRectangle.Height
                                      );
    
                                    if (bitmap != IntPtr.Zero) {
                                        IntPtr hOld = (IntPtr)GDI32.SelectObject(hdcMemory, bitmap);
                                        GDI32.BitBlt(
                                          hdcMemory,
                                          0, 0,
                                          browser.ClientRectangle.Width, browser.ClientRectangle.Height,
                                          hdcDestination,
                                          0, 0,
                                          TernaryRasterOperations.SRCCOPY
                                          );
                                        GDI32.SelectObject(hdcMemory, hOld);
                                        GDI32.DeleteDC(hdcMemory);
                                        graphics.ReleaseHdc(hdcDestination);
    
                                        SaveThumbnail(Image.FromHbitmap(bitmap));
                                    }
                                }
                            }
                        }
                    }
                }
            }
    private void SaveThumbnail(Image image) {
                if (image != null) {//创建一个位图图像
                    Bitmap thumbnail = new Bitmap(160, 120, PixelFormat.Format24bppRgb);
                    thumbnail.SetResolution(image.HorizontalResolution, image.VerticalResolution);
    
                    using (Graphics resize = Graphics.FromImage(thumbnail)) {
                        resize.InterpolationMode = InterpolationMode.HighQualityBicubic;
                        resize.DrawImage(image,
                          new Rectangle(0, 0, 160, 120),
                          new Rectangle(0, 0, _webBrowser.ClientRectangle.Width, _webBrowser.ClientRectangle.Height),
                          GraphicsUnit.Pixel);
                    }
                    thumbnail.Save(_file.FullName, ImageFormat.Png);
                }
            }
  • 相关阅读:
    selenium--启动不同的浏览器
    selenium--文件下载
    selenium--常用的获取元素属性
    Python读取yaml文件
    python读Excel方法(xlrd)
    Python--unittest框架
    Python--os模块
    git fork后提交pull request到原作者,别人的pull request我们要怎样merge融合
    GitHub fork的使用
    4.Factory Pattern(工厂模式)
  • 原文地址:https://www.cnblogs.com/renzhe/p/3032009.html
Copyright © 2020-2023  润新知