Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2012, 21:30   #1
scroyler
Форумчанин
 
Регистрация: 02.08.2011
Сообщений: 142
По умолчанию Получать каптчу (картинку) не по ссылке, а из браузера - нужно переделать код

Всем привет есть код

Код:
Код:
uses
  ExtCtrls, mshtml, OleCtrls, ClipBrd, SHDocVw, WinInet, shellapi, URLMon,
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,JPEG;

type
  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    Image1: TImage;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);

     type
  IHTMLElementRender = interface(IUnknown)
    ['{3050F669-98B5-11CF-BB82-00AA00BDCE0B}']
    function DrawToDC
      ( _hDC:                      HDC
      ): HResult; stdcall;
  end;





  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
function DownloadFile(SourceFile, DestFile: string): Boolean;
begin
  try
    Result := UrlDownloadToFile(nil, PChar(SourceFile), PChar(DestFile), 0, nil) = 0;
  except
    Result := False;
  end;
end;




procedure TForm1.Button1Click(Sender: TObject);
const
  // URL Location
  SourceFile = 'ссылка на нужную картинку';
  // Where to save the file
  DestFile = 'c:\temp\капча.gif';
begin
  if DownloadFile(SourceFile, DestFile) then
  begin
    ShowMessage('Download succesful!');
  end
  else
    ShowMessage('Error while downloading ' + SourceFile)
end;

он выдерает капчу с ссылки,а как сделать так что бы он выдерал эту картинку сразу с браузера, а то капча меняется и картинки не соответствуют друг другу(
scroyler вне форума Ответить с цитированием
Старый 08.02.2012, 22:06   #2
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

ну тогда загружайте страницу с помощью indy и парсите от туда значение
Кольша вне форума Ответить с цитированием
Старый 09.02.2012, 06:33   #3
scroyler
Форумчанин
 
Регистрация: 02.08.2011
Сообщений: 142
По умолчанию

мне нужно именно с веббраузера
scroyler вне форума Ответить с цитированием
Старый 09.02.2012, 10:51   #4
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

тогда отключите поддержку картинок(советую EmbeddedWB) пото получайте код страницы и парсите ссылку на капчу
Кольша вне форума Ответить с цитированием
Старый 09.02.2012, 15:25   #5
scroyler
Форумчанин
 
Регистрация: 02.08.2011
Сообщений: 142
По умолчанию

Цитата:
Сообщение от Кольша Посмотреть сообщение
тогда отключите поддержку картинок(советую EmbeddedWB) пото получайте код страницы и парсите ссылку на капчу
как отключить? и как спарсить с веббраузера?
scroyler вне форума Ответить с цитированием
Старый 09.02.2012, 16:59   #6
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

скачайте EmbeddedWB там отключите показ картинок потом получите html код получить можно так же как и у обычного потом copy pos delete вам помогут
Кольша вне форума Ответить с цитированием
Старый 09.02.2012, 19:57   #7
scroyler
Форумчанин
 
Регистрация: 02.08.2011
Сообщений: 142
По умолчанию

Цитата:
Сообщение от Кольша Посмотреть сообщение
скачайте EmbeddedWB там отключите показ картинок потом получите html код получить можно так же как и у обычного потом copy pos delete вам помогут
Ну да,это все детали, вот я спарсил, а как в TIMAGE загрузить?
scroyler вне форума Ответить с цитированием
Старый 09.02.2012, 22:39   #8
jone
Форумчанин
 
Аватар для jone
 
Регистрация: 27.09.2008
Сообщений: 152
По умолчанию

Код:
function DownloadJPGToBitmap(const URL : string; ABitmap: TBitmap): Boolean;
var
 // idHttp: TIdHTTP;
  ImgStream: TMemoryStream;
  JpgImage: TJPEGImage;
begin
  Result := False;
  ImgStream := TMemoryStream.Create;
  try
   // idHttp1 := TIdHTTP.Create(nil);
    try
      form1.idHttp1.Get(URL, ImgStream);
    finally
      //idHttp1.Free;
    end;
    ImgStream.Position := 0;
    JpgImage := TJPEGImage.Create;
    try
      JpgImage.LoadFromStream(ImgStream);
      ABitmap.Assign(JpgImage);
    finally
      Result := True;
      JpgImage.Free;
    end;
  finally
    ImgStream.Free;
  end;
end;


Код:
src:=copy(s,pos('<img id="captcha_image" class="captcha_image" src="',s)+51,134);
//sleep(500);
DownloadJPGToBitmap(src, Image1.Picture.Bitmap);


получить исходный код

Код:
s:= 'http://www.site.ru/';
 s1:= 'navNoWriteToCache,navNoReadToCache';
 Webbrowser1.Navigate2(s, s1);
 Memo1.Text := WebBrowser1.OleObject.document.body.InnerHTML;
___________________________________ ___________________________________

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
fs: TFileStream;
begin
fs := TFileStream.Create('c:\image.png', fmCreate);
IdHTTP1.Get(‘Сайт картинки’, fs);
fs.Free;
Image1.Picture.LoadFromFile('c:\image.png');
DeleteFile('c:\image.png');
end;

end.

Последний раз редактировалось jone; 09.02.2012 в 22:41.
jone вне форума Ответить с цитированием
Старый 10.02.2012, 07:46   #9
scroyler
Форумчанин
 
Регистрация: 02.08.2011
Сообщений: 142
По умолчанию

Спасибо, но во время скачки каптча все равно то поменяется, так как он заходит на нее, а мне надо, что бы чисто с веббраузера.

Код:
function DownloadJPGToBitmap(const URL : string; ABitmap: TBitmap): Boolean;
var
 // idHttp: TIdHTTP;
  ImgStream: TMemoryStream;
  JpgImage: TJPEGImage;
begin
  Result := False;
  ImgStream := TMemoryStream.Create;
  try
  // idHttp1 := TIdHTTP.Create(nil);
    try
     //idhttp1.Get(URL, ImgStream);
    finally
     // idHttp1.Free;
    end;
    ImgStream.Position := 0;
    JpgImage := TJPEGImage.Create;
    try
      JpgImage.LoadFromStream(ImgStream);
      ABitmap.Assign(JpgImage);
    finally
      Result := True;
      JpgImage.Free;
    end;
  finally
    ImgStream.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin

end;

procedure TForm1.Button2Click(Sender: TObject);
var s,s1:string;
begin
    s:= 'http://lampo4ka.3dn.ru/index/3';
 s1:= 'navNoWriteToCache,navNoReadToCache';
 Webbrowser1.Navigate(s, s1);
 Memo1.Text := WebBrowser1.OleObject.document.body.InnerHTML;
end;

procedure TForm1.Button3Click(Sender: TObject);
var str:string; n:integer;
begin
str:=Memo1.Text;
n:=pos('" align=absMiddle src="',str)+length('" align=absMiddle src="');
Edit1.text:=copy(str,n,posex('<IMG style="CURSOR: pointer" title="Обновить код безопасности" onclick="document.getElementById',str,n)-n);

 DownloadJPGToBitmap(edit1.text, Image1.Picture.Bitmap);

 end;

end.
вот мой код, но картинку не сохраняет, что не так?
scroyler вне форума Ответить с цитированием
Старый 10.02.2012, 14:52   #10
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

показ картинок подключен?
Кольша вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
НУЖНО переделать код из Pascal в Delphi Len4i]{ Помощь студентам 7 06.06.2010 18:35
Переделать код Hepri Работа с сетью в Delphi 3 20.08.2009 20:28
Как закрепить картинку относительно окна браузера? Svetix HTML и CSS 18 18.04.2009 23:12
Нужно переделать код с Delphi на C++ Builder POPOV Помощь студентам 2 12.11.2007 22:51