|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Html парсинг в webbrowser
Добрый вечер!
Столкнулся с такой проблемой- есть страничка http://www.puntoun.com.ar/productoras/395-cinergy-sa которую я загружаю через webbrowser . Из нее мне необходимо получать капчу в виде изображения и сохранять в папку причем каждый раз с одним и тем же именем , то есть изображения при каждом запуске должны менять друг друга... Перепробовал кучу вариантов но к сожалению так и не понял ка это реализовать. Помогите плиз! |
#2
|
||||
|
||||
Ваш код, мастер.
|
#3
|
|||
|
|||
в том то и дело что кода нет ( просто webbrowser в который подгружается данная страничка и заполняются автоматически поля, а как сохранить капчу я не знаю (
|
#4
|
||||
|
||||
Ну, по всему, нужно проводить парсинг странички, выискивая нужное, присваивать, к примеру, к TImage и сохранять как обычно через TImage.Picture.SaveToFile
|
#5
|
|||
|
|||
Спасибо большое за подсказку , а то даже не знаю с чего начать там ...
|
#6
|
|||
|
|||
Вопрос с парсингом страницы вопрос решился ) теперь другой вопрос - парсил я сейчас страницу просто так , а мне нужно парсить именно ту которая загружается в twebbrowser , как это можно сделать ?
PS парсинг осуществляю при помощи IdHTTP1.Get Последний раз редактировалось masterkungfu, 27.06.2011 в 01:34. |
#7
|
|||
|
|||
чуть чуть уточню
если делаю парсинг при помощи 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
|
|||
|
|||
И этот вопрос тоже решил ))) но столкнулся с новым...
капча генерируется таким образом http://www.puntoun.com.ar/components...nticache=84615 Поэтому мне нужно достать ее именно из webbrowsera как это возможно сделать ? |
#9
|
|||
|
|||
И сразу появился еще небольшой вопрос - как сохранить все изображения с сайта загруженного в 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
|
||||
|
||||
Пробуй так:
Код:
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
|
|||
|
|||
такой вариант не подойдет...
потому что сайт прогружается у меня в webbrowser и следовательно капчу нужно взять непосредственно оттуда из загруженной страницы , а дальше картинка уходит на сервис и возвращает мне расшифрованную капчу ... варианта как отдельно вырезать капчу не придумал ... поэтому и думаю что нужно просто сохранять все изображения со страницы , по имени выбирать нужное мне и после отправки просто чистить папку) поэтому вопрос как все изображения сохранить) |
#12
|
||||
|
||||
Так я и думал, что вредительством решил заняться. Считаю продолжать помогать в данной теме бесперспективно.
|
#13
|
|||
|
|||
тут ничего вредного ) есть пара наших ресурсов , на которых мы постим ссылки на новые проекты для ускорения появления в выдаче ) каждый раз перебирать все руками каждый раз - долго и нудно ... вот и решил автоматизировать ) а данный сайт просто взял за основу потому что на нем тот же компонент установлен ) так что все же очень надеюсь на помощь (
|
#14
|
||||
|
||||
модуль 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
|
|||
|
|||
Огромное спасибо !! именно то решение которое искал ! только еще небольшой вопрос - а можно чтобы файлы сохранялись с тем именем с которым они находятся на сайте ? то есть напримен logo а не 00001 ?
|