Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.06.2011, 22:59
masterkungfu masterkungfu вне форума
Прохожий
 
Регистрация: 26.06.2011
Сообщения: 14
Репутация: 10
По умолчанию Html парсинг в webbrowser

Добрый вечер!
Столкнулся с такой проблемой- есть страничка http://www.puntoun.com.ar/productoras/395-cinergy-sa которую я загружаю через webbrowser .
Из нее мне необходимо получать капчу в виде изображения и сохранять в папку причем каждый раз с одним и тем же именем , то есть изображения при каждом запуске должны менять друг друга...
Перепробовал кучу вариантов но к сожалению так и не понял ка это реализовать. Помогите плиз!
Ответить с цитированием
  #2  
Старый 26.06.2011, 23:01
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Ваш код, мастер.
Ответить с цитированием
  #3  
Старый 26.06.2011, 23:21
masterkungfu masterkungfu вне форума
Прохожий
 
Регистрация: 26.06.2011
Сообщения: 14
Репутация: 10
По умолчанию

в том то и дело что кода нет ( просто webbrowser в который подгружается данная страничка и заполняются автоматически поля, а как сохранить капчу я не знаю (
Ответить с цитированием
  #4  
Старый 26.06.2011, 23:48
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Ну, по всему, нужно проводить парсинг странички, выискивая нужное, присваивать, к примеру, к TImage и сохранять как обычно через TImage.Picture.SaveToFile
Ответить с цитированием
  #5  
Старый 26.06.2011, 23:56
masterkungfu masterkungfu вне форума
Прохожий
 
Регистрация: 26.06.2011
Сообщения: 14
Репутация: 10
По умолчанию

Спасибо большое за подсказку , а то даже не знаю с чего начать там ...
Ответить с цитированием
  #6  
Старый 27.06.2011, 01:24
masterkungfu masterkungfu вне форума
Прохожий
 
Регистрация: 26.06.2011
Сообщения: 14
Репутация: 10
По умолчанию

Вопрос с парсингом страницы вопрос решился ) теперь другой вопрос - парсил я сейчас страницу просто так , а мне нужно парсить именно ту которая загружается в twebbrowser , как это можно сделать ?
PS парсинг осуществляю при помощи IdHTTP1.Get

Последний раз редактировалось masterkungfu, 27.06.2011 в 01:34.
Ответить с цитированием
  #7  
Старый 27.06.2011, 14:53
masterkungfu masterkungfu вне форума
Прохожий
 
Регистрация: 26.06.2011
Сообщения: 14
Репутация: 10
По умолчанию

чуть чуть уточню
если делаю парсинг при помощи indi то получаю то что нужно :

Код:
St:=IdHTTP1.Get('http://www.puntoun.com.ar/productoras/395-cinergy-sa');
Delete(St,1,pos('<img id="comment_captcha_img" class="comment_captcha_img" src="',St)+length('<img id="comment_captcha_img" class="comment_captcha_img" src="')-1);
Delete(St,pos('">',St),length(St));
ShowMessage(St);

как то же самое реализовать через webbrowser ? нужно чтобы страница прогрузилась и из нее я получил бы ссылку на капчу.
пробовал так

Код:
WebBrowser1.Navigate('http://www.puntoun.com.ar/productoras/395-cinergy-sa');
  while WebBrowser1.ReadyState<READYSTATE_COMPLETE do
    Application.ProcessMessages;
  document:=WebBrowser1.Document as IHTMLDocument2;
if Assigned(document) then
try
    St:=WebBrowser1.OleObject.Document.documentElement.innerHTML;
    Delete(St,1,pos('<img id="comment_captcha_img" class="comment_captcha_img" src="',St)+length('<img id="comment_captcha_img" class="comment_captcha_img" src="')-1);
Delete(St,pos('">',St),length(St));
Memo1.text:=St;

но возвращается что то в стиле .ar/productoras/395-cinergy-sa
Ответить с цитированием
  #8  
Старый 27.06.2011, 18:51
masterkungfu masterkungfu вне форума
Прохожий
 
Регистрация: 26.06.2011
Сообщения: 14
Репутация: 10
По умолчанию

И этот вопрос тоже решил ))) но столкнулся с новым...
капча генерируется таким образом http://www.puntoun.com.ar/components...nticache=84615
Поэтому мне нужно достать ее именно из webbrowsera как это возможно сделать ?
Ответить с цитированием
  #9  
Старый 27.06.2011, 21:38
masterkungfu masterkungfu вне форума
Прохожий
 
Регистрация: 26.06.2011
Сообщения: 14
Репутация: 10
По умолчанию

И сразу появился еще небольшой вопрос - как сохранить все изображения с сайта загруженного в webbrowser ?
пробовал такое решение -
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OleCtrls, SHDocVw, UrlMon, ActiveX;

type
  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  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.Button2Click(Sender: TObject);
var 
  k, p: Integer; 
  Source, dest, ext: string; 
begin 
  for k := 0 to WebBrowser1.OleObject.Document.Images.Length - 1 do
  begin 
    Source := WebBrowser1.OleObject.Document.Images.Item(k).Src; 
    p := LastDelimiter('.', Source);
    ext := UpperCase(Copy(Source, p + 1, Length(Source))); 
    if (ext = 'GIF') or (ext = 'JPG') then 
    begin
      p  := LastDelimiter('/', Source); 
      dest := ExtractFilePath(ParamStr(0)) + Copy(Source, p + 1, Length(Source));
      DownloadFile(Source, dest); 
    end; 
  end; 
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  WebBrowser1.Navigate( 'http://www.puntoun.com.ar/productoras/395-cinergy-sa' );
end;

end.
Но почему то при нажатии на кнопку ничего не происходит (
Ответить с цитированием
  #10  
Старый 27.06.2011, 21:43
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Пробуй так:

Код:
procedure TForm1.Button7Click(Sender: TObject);
var
  Stream : TMemoryStream;
begin
  Stream := TMemoryStream.Create;
  try
    IdHTTP1.Get('http://www.puntoun.com.ar/components/com_chronocomments/chrono_verification.php?imtype=1&anticache=84615', Stream);
    Stream.Seek(0, 0);
    if Stream.Size > 0 then
      Stream.SaveToFile('c:\\test.img');
  finally
    Stream.Free;
  end;
end;

Я поставил расширение '.img' на сохраняемый файл так как не известно что загрузилось. Чтобы правильно давать расширение нужно дополнительно проверить хэдер у загруженного файла, но это уже другая тема.
P.S. Только нужно ли заниматься сканированием изображений на предмет их "взлома", для последующего скармливания "роботу"?

Последний раз редактировалось angvelem, 27.06.2011 в 22:13.
Ответить с цитированием
  #11  
Старый 27.06.2011, 22:24
masterkungfu masterkungfu вне форума
Прохожий
 
Регистрация: 26.06.2011
Сообщения: 14
Репутация: 10
По умолчанию

такой вариант не подойдет...
потому что сайт прогружается у меня в webbrowser и следовательно капчу нужно взять непосредственно оттуда из загруженной страницы , а дальше картинка уходит на сервис и возвращает мне расшифрованную капчу ... варианта как отдельно вырезать капчу не придумал ... поэтому и думаю что нужно просто сохранять все изображения со страницы , по имени выбирать нужное мне и после отправки просто чистить папку) поэтому вопрос как все изображения сохранить)
Ответить с цитированием
  #12  
Старый 27.06.2011, 22:27
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Так я и думал, что вредительством решил заняться. Считаю продолжать помогать в данной теме бесперспективно.
Ответить с цитированием
  #13  
Старый 27.06.2011, 23:01
masterkungfu masterkungfu вне форума
Прохожий
 
Регистрация: 26.06.2011
Сообщения: 14
Репутация: 10
По умолчанию

тут ничего вредного ) есть пара наших ресурсов , на которых мы постим ссылки на новые проекты для ускорения появления в выдаче ) каждый раз перебирать все руками каждый раз - долго и нудно ... вот и решил автоматизировать ) а данный сайт просто взял за основу потому что на нем тот же компонент установлен ) так что все же очень надеюсь на помощь (
Ответить с цитированием
  #14  
Старый 28.06.2011, 10:17
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

модуль HTMLka, в нем функция:
Код:
function SaveBitmaps(AWebBrowser: TWebBrowser; APath: String; AStrings: TStrings = nil): Integer;

использование:
Код:
var
  URL: String;
begin
  URL:='http://www.puntoun.com.ar/productoras/395-cinergy-sa';
  WebBrowser1.Navigate(URL);
  while WebBrowser1.ReadyState<READYSTATE_COMPLETE do
    Application.ProcessMessages;
  ShowMessage(IntToStr(SaveBitmaps(WebBrowser1, 'd:\Downloads', Memo1.Lines)));
end;

скачать:
http://narod.ru/disk/38442902001/HTMLka.dcu.html
__________________
Пишу программы за еду.
__________________

Последний раз редактировалось NumLock, 22.01.2012 в 12:09.
Ответить с цитированием
  #15  
Старый 28.06.2011, 10:37
masterkungfu masterkungfu вне форума
Прохожий
 
Регистрация: 26.06.2011
Сообщения: 14
Репутация: 10
По умолчанию

Огромное спасибо !! именно то решение которое искал ! только еще небольшой вопрос - а можно чтобы файлы сохранялись с тем именем с которым они находятся на сайте ? то есть напримен logo а не 00001 ?
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:22.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter