我有一个从各个站点收集信息以填充数据库的应用程序。我被困在有验证码的这个网站上。我需要向用户显示验证码。问题是图像位于的background-image
中DIV
。
该DIV id
是captchaCodigo
。
我知道如何通过ID和名称获取元素,使用值等。但是我不知道如何获取图片或URL。
提前致谢
图像为base64 encoding
,您需要将其形成html代码并将其转换为位图,请不要忘记发送uuidCaptcha
带有您的发帖请求的ID,该ID是标识您在程序中输入的验证码的ID。
uses Soap.EncdDecd, IdHTTP, System.StrUtils, pngimage;
Function _ExtractBetweenTags(Const s, LastTag, FirstTag: string; TrimTags: Boolean = True): string;
var
pLast,pFirst,pNextFirst : Integer;
begin
pFirst := Pos(FirstTag,s);
pLast := Pos(LastTag,s);
while (pLast > 0) and (pFirst > 0) do begin
if (pFirst > pLast) then // Find next LastTag
pLast := PosEx(LastTag,s,pLast+Length(LastTag))
else
begin
pNextFirst := PosEx(FirstTag,s,pFirst+Length(FirstTag));
if (pNextFirst = 0) or (pNextFirst > pLast) then begin
if TrimTags then begin
Result := Trim(StringReplace(Trim(Copy(s,pFirst,pLast-pFirst+Length(LastTag))), LastTag, '', [rfReplaceAll, rfIgnoreCase]));
Result := Trim(StringReplace(Result, FirstTag, '', [rfReplaceAll, rfIgnoreCase]));
end
else
Result := Trim(Copy(s,pFirst,pLast-pFirst+Length(LastTag)));
Exit;
end
else
pFirst := pNextFirst;
end;
end;
Result := '';
end;
procedure TForm4.btn1Click(Sender: TObject);
var
Input: TStringStream;
Output: TBytesStream;
sTmp, uuidCaptcha, captchaCodigo: string;
IdHTTP: TIdHTTP;
Graphic: TGraphic;
begin
IdHTTP := TIdHTTP.Create(nil);
try
IdHTTP.AllowCookies := True;
IdHTTP.HandleRedirects := True;
IdHTTP.Request.Connection := 'keep-alive';
IdHTTP.Request.UserAgent := 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36';
sTmp := IdHTTP.Get('http://www.tjms.jus.br/cpopg5/imagemCaptcha.do');
uuidCaptcha := _ExtractBetweenTags(sTmp, '"}', '"uuidCaptcha": "'); // You need this when you send the post request
captchaCodigo := _ExtractBetweenTags(sTmp, '", "labelValorCaptcha":', 'base64,');
mmo1.Lines.Add(captchaCodigo);
Input := TStringStream.Create(captchaCodigo, TEncoding.ASCII);
try
Output := TBytesStream.Create;
try
Soap.EncdDecd.DecodeStream(Input, Output);
Output.Position := 0;
Graphic := TPngImage.Create;
try
Graphic.LoadFromStream(Output);
img1.Picture.Bitmap.Assign(Graphic); // Your Image loads here
finally
Graphic.Free;
end;
finally
Output.Free;
end;
finally
Input.Free;
end;
finally
IdHTTP.Free;
end;
end;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句