![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Добрый вечер!
Столкнулся с такой проблемой- есть страничка 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 ?
|