一个成功获取百度注册页面验证码图片的源代码
成功实现使用delphi获取百度的验证码图片(只获得图片,不进行识别,识别之后再研究吧O(∩_∩)O)
procedure TForm1.btn1Click(Sender: TObject); procedure doSomething(ms: TMemoryStream); var Buffer:Word; AjpgFile: TJPEGImage; begin ms.Position := 0; if ms.Size = 0 then Exit; ms.ReadBuffer(Buffer,2); //读取文件的前2个字节,放到Buffer里面 if Buffer=$4D42 then //如果前两个字节是以4D42[低位到高位] begin ShowMessage('BMP'); //那么这个是BMP格式的文件 end else if Buffer=$D8FF then //如果前两个字节是以D8FF[低位到高位] begin ShowMessage('JPEG'); //........一样 下面不注释了 ms.Position := 0; AjpgFile := TJPEGImage.Create; AjpgFile.LoadFromStream(ms); Image1.Picture.Graphic := AjpgFile; end else if Buffer=$4947 then begin ShowMessage('GIF'); end else if Buffer=$5089 then begin ShowMessage('PNG'); end; end;var Openurl : string; elem: IHTMLElement; coll: IHTMLElementCollection; i: Integer; url, Text: string; d2,D:IHTMLDocument2; d1:IHTMLDocument; e:IHTMLElement; e2:IHTMLElement2; cp: IHTMLControlRange; img:IHTMLImgElement; ce:IHTMLControlElement; bmp:TBitmap ; r0:TRect; newbmp:TBitmap; r1:TRect; checkstr:string; MyHandle :THandle ; bmpPtr:Pointer; ms:TMemoryStream; //内存流对象begin ms := TMemoryStream.Create; //建立内存流对象 IdHTTPBaiDu := TIdHTTP.Create(nil); IdHTTPBaiDu.ReadTimeout := 2000000; IdHTTPBaiDu.IOHandler := IdSSLIOHandlerSocketOpenSSL1.Create(nil); Openurl := 'https://passport.baidu.com/v2/?reg&u=http://www.baidu.com/&tpl=mn';// Openurl := 'http://zc.qq.com/chs/index.html';// Openurl := 'http://www.doubao.com/user/reg';//豆包网 try BaiDuWebBrowser.Navigate(Openurl); while BaiDuWebBrowser.Busy do begin Application.ProcessMessages; end; BaiDuWebBrowser.Stop; if BaiDuWebBrowser.Document = nil then Exit; //获取源代码 D := BaiDuWebBrowser.Document as IHTMLDocument2; e :=d.body as IHTMLElement; e2 :=e as IHTMLElement2; cp :=e2.createControlRange as IHTMLControlRange; d2 :=BaiDuWebBrowser.Document as IHTMLDocument2; //下面是破解验证码 coll := d.all; coll :=(coll.tags('img') as IHTMLElementCollection); for i := 0 to coll.Length - 1 do begin //循环取出每个url elem := (coll.item(i,0) as IHTMLElement); url :=Trim(string(elem.getAttribute(WideString('src'), 0))); //Text := Trim(string(elem.outertext)); if Pos('doubao' , url) > 0 then //豆包网 begin if Pos('auth/checkcode',url) > 0 then begin IdHTTPBaiDu.Get(url,ms); doSomething(ms); Break; end end else if Pos('qq.com' , url) > 0 then //腾讯QQ begin if pos('getimage', url) > 0 then begin IdHTTPBaiDu.Get(url,ms); doSomething(ms); Break; end end else if Pos('baidu.com' , url) > 0 then //百度 begin if Pos('genimage',url) > 0then begin IdHTTPBaiDu.Get(url,ms); doSomething(ms); Break; end; end; end; finally end;end;写的很烂,不过确实可以实现。嘻嘻~
需要使用两个dll包。delphi2007的可以使用的连接地址为:http://download.csdn.net/detail/sushengmiyan/4639225