Получение html кода страницы из TWebBrowser
Собственно вопрос, как можно получить html код с TWebBrowser, если можно с комментариями, что есть что.
Добавлено через 54 минуты
Сразу скажу, что:
procedure TForm1.Button2Click(Sender: TObject); var Document: IHTMLDocument2; begin Document := WebBrowser.Document as IHtmlDocument2; Memo1.Text := (Document.all.Item(NULL, 0) as IHTMLElement).OuterHTML; end;
толку не дало, по нажатию ничего не происходит.
Добавлено через 23 минуты
И если все же кому-то интересно:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
procedure TForm1.Button2Click(Sender: TObject); var Doc:IHTMLDocument2; S:string; begin WebBrowser1.Navigate('URL'); while WebBrowser1.ReadyStatedo begin Application.ProcessMessages; end; Doc:= WebBrowser1.Document as IHTMLDocument2; s:=doc.body.innerHTML; Memo1.Text:=s; end;
Работа с TWebBrowser. Парсинг HTML кода.
что-то у меня не получается 🙁 можете помочь сразу готовый написать. есть несколько ссылок типа: .
Получение исходного кода html страницы
Здравствуйте, интересует собственно как например в Memo получить исходный код указанной страницы.
TwebBrowser + неполное сохранение кода страницы. Что делать?
Доброго времени суток. Пишу программу для разбора кода HTML страницы. Наткнулся на проблему на.
Получение html кода страницы
Значит, мне нужно получить html код указанной страницы. Однако я, не удосужившись изучить основы и.
Хороший способ, как раз искал. Хотелось бы еще научиться править исходный код страницы и загружать его обратно в TWebBrowser. Может кто знает, как это можно сделать?
Через вызов doc.body.innerHTML можно получить только часть HTML кода страницы — ту, которая ограничена тегами
— .Т. е., например, если HTML код страницы такой:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
"http://www.w3.org/TR/html4/loose.dtd"> html> meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> head> title>Заголовок/title> /head> body> input type="text" id="sysSerial1" value="1">br> input type="text" id="sysSerial2" value="2">br> input type="text" id="SysSerial3" value="3"> /body> /html>
body> input type="text" id="sysSerial1" value="1">br> input type="text" id="sysSerial2" value="2">br> input type="text" id="SysSerial3" value="3"> /body>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
uses ActiveX; //Выгрузка потокового содержимого объекта в стоку. function ObjStreamToStr(const aDisp : IDispatch) : String; const SelfName = 'ObjStreamToStr()'; var IPsi : IPersistStreamInit; Sa : TStreamAdapter; Ss : TStringStream; begin Result := ''; //Проверяем, есть ли ссылка на интерфейс объекта. if aDisp = nil then raise Exception.Create(SelfName + '. Ссылка на интерфейс объекта - пустая!'); //Проверяем, поддерживает ли объект потоковый интерфейс. //Если потоковый интерфейс поддерживается, то подключаемся к нему. if aDisp.QueryInterface(IPersistStreamInit, IPsi) <> S_OK then //S_OK = 0 raise Exception.Create(SelfName + '. Объект не поддерживает потоковый интерфейс!'); //Создаём строковый поток. Ss := TStringStream.Create(''); Потоковый адаптер реализует интерфейс IStream. Второй параметр инициализирует свойство Sa.StreamOwnership: soReference - показывает, что экземпляр Sa не является ответственным за уничтожение экземпляра Ss. Т. е., при уничтожении, объект Sa не должен уничтожать связанный с ним поток Ss. soOwned - показывает, что экземпляр Sa является ответственным за уничтожение экземпляра Ss. Т. е., при уничтожении, объект Sa должен уничтожить поток Ss.> Sa := TStreamAdapter.Create(Ss, soReference); //Записываем содержимое объекта в строковый поток. IPsi.Save(Sa, True); Result := Ss.DataString; //Уничтожаем экземпляры Sa и Ss. FreeAndNil(Sa); FreeAndNil(Ss); end; //Выгрузка HTML содержимого объекта WebBrowser1.Document в строку и //загрузка этой строки в Memo. procedure TForm1.Button1Click(Sender: TObject); begin Memo1.Text := ObjStreamToStr(WebBrowser1.Document); //Если HTML код представлен в кодировке UTF-8, то следует выполнить преобразование: //Memo1.Text := Utf8ToAnsi( ObjStreamToStr(WebBrowser1.Document) ); end;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
//Загрузка HTML документа из строковой переменной. //Функция возвращает ссылку на интерфейс объекта документа. function LoadHTMLContent(aWb : TWebBrowser; const aStr : String) : Variant; begin Result := aWb.OleObject.document; //Если объект документа оказался несозданным, то создаём его. if TVarData(Result).VDispatch = nil then begin //Создаём новый документ с пустым содержанием. aWb.Navigate('about :blank'); Result := aWb.OleObject.document; end; //Загружаем в документ нужный HTML код из строковых данных. Result.open('text/html', 'replace'); Result.write(aStr); Result.close; end;
Загрузка html страницы в делфи
Загрузка HTML-страницы с выполнением скриптов
Помогите, пжлста, реализовать следующую задачу. Нужно загрузить страницы сайтов, выполнить скрипты.
Загрузка html-страницы
Возможно в c# скачать html страницу, без использования запроса, создания файла и вставки в него.
Загрузка картинки из html страницы.
Подскажите как можно загрузить картинку не из фаила а из самого html. И возможно ли это?
загрузка определенной части html страницы?
Всем привет, есть таблица чемпионата по футболу на спортивном портале, вокруг этой таблицы баннеры.
Вообще на странице отображаться должна гугловская карта, но она не хочет отображаться. Вообще она может быть отображена в делфи?
Сообщение от light_girlz
Вообще на странице отображаться должна гугловская карта, но она не хочет отображаться. Вообще она может быть отображена в делфи?
Сообщение от NT SERVICE
Сообщение от light_girlz
Сообщение от NT SERVICE
А можно прописать текст htmlвский в WebBrowser1.Navigate(‘текстhtml’) и если это возможно то как прописывать большой по объему текст?
Сообщение от light_girlz
А можно прописать текст htmlвский в WebBrowser1.Navigate(‘текстhtml’) и если это возможно то как прописывать большой по объему текст?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
Функция возвращает ссылку на интерфейс DOM объекта document.> function LoadHTMLContent(aWb : TWebBrowser; const aStr : String) : Variant; begin //Ссылка на интерфейс объекта документа. Result := aWb.OleObject.document; //Если объект документа оказался не созданным, то создаём его. if TVarData(Result).VDispatch = nil then begin //Создаём новый документ с пустым содержанием. aWb.Navigate('about :blank'); Result := aWb.OleObject.document; end; //Загружаем в документ HTML код из строки aStr. Result.open('text/html', 'replace'); Result.write(aStr); Result.close; end; //Загрузка в TWebBrowser нового HTML содержимого из Memo. procedure TForm1.Button1Click(Sender: TObject); begin //Не показывать предупреждения и сведения об ошибках. WebBrowser1.Silent := True; //Загрузка HTML содержимого в TWebBrowser. LoadHTMLContent(WebBrowser1, Memo1.Text); end;
Отобразить страницу html в программе на Delphi
Как отобразить в WebBrowser html страницу по html коду, который расположен в БД?
Как отобразить в "WebBrowser"(ActiveX) и (или) "ВебБраузер" html страницу на основании html кода.
Загрузить и отобразить HTML — страницу
Всем доброго времени суток. Друзья, как используя TClientSocket и TTcpClient загрузить.
Отобразить html-страницу в облаке
Всем привет. Добрался до интернета. Нужно отобразить (в броузере или в 1С) программно некий URL.
Отобразить string html страницу в View
Добрый день, подключаю сервис оплаты в приложение на ASP.NET Core 2 MVC Ответом на контроллер от.
WebBrowser1.Navigate('file://' + ExtractFilePath(paramStr(0))+'1.htm');
Добавлено через 1 минуту
покажите как связать лист бокс кнопку и этот код?
Например, прямо для кнопки в обработчик события OnClick можно записать. На форму надо положить: TButton, TOpenDialog и TWebBrowser. Затем, для кнопки создать обработчик события OnClick и его код оформить так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
//Загрузка документа в TWebBrowser из файла. procedure TForm1.Button1Click(Sender: TObject); var Od : TOpenDialog; begin Od := OpenDialog1; if Od.InitialDir = '' then Od.InitialDir := ExtractFilePath(ParamStr(0)); if not Od.Execute then Exit; if not FileExists(Od.FileName) then begin ShowMessage('Файл с заданным именем не найден. Действие отменено.'); Exit; end; WebBrowser1.Navigate('file://' + Od.FileName); end;
Основа решения может выглядеть так. На форму кладём TListBox (ListBox1) и TWebBrowser (WebBrowser1). Для ListBox1 надо создать обработчик события OnDblClick и его код оформить так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
procedure TForm1.FormCreate(Sender: TObject); begin ListBox1.Items.Add('Тема 1.'); ListBox1.Items.Add('Тема 2.'); ListBox1.Items.Add('Тема 3.'); ListBox1.Items.Add('Тема 4.'); ListBox1.Items.Add('Тема 5.'); end; procedure TForm1.ListBox1DblClick(Sender: TObject); var Lb : TListBox; FileName : String; begin Lb := Sender as TListBox; if lb.ItemIndex = -1 then Exit; //Если ни один элемент не выбран - выходим. FileName := ExtractFilePath(ParamStr(0)) + 'Files\' + IntToStr(lb.ItemIndex) + '.html'; if not FileExists(FileName) then begin MessageBox( 0 ,PChar('Файл не найден. Действие отменено. Индекс файла: ' + IntToStr(lb.ItemIndex)) ,PChar('Ошибка!') ,MB_OK + MB_ICONERROR + MB_APPLMODAL ); Exit; end; //Загрузка файла в браузер. WebBrowser1.Navigate('file://' + FileName); end;
Теперь, в той папке, где располагается исполняемый файл программы, создаём папку Files. В эту папку надо поместить нужные HTML файлы. Имена файлов должны быть такими:
0.html, 1.html и т. д.
В этих именах число, записанное до точки, будет соответствовать индексу элемента в ListBox1.
—
Таким образом, чтобы открыть нужный документ, пользователь должен выбрать в списке ListBox1 нужную строку и выполнить на ней двойной щелчок мышью. При этом, соответствующий документ загрузится в WebBrowser1.
—
К сообщению приложен архив с этим проектом. Там HTML файлы в кодировке UTF8.
а как сделать что бы с разных ListBox переносились файлы в 1н WebBrowser1.Navigate все перепробовал выдает ошибку((
вот написал небольшую программулину, ищет в заданной папке файлы с заданным расширением, добавляет в листбокс, тыкаем в листбокс на название — грузим этот документ в браузер
ну и вот код, так для общего понятия что лежит в архиве
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, OleCtrls, SHDocVw_TLB; type TForm1 = class(TForm) ListBox1: TListBox; Button1: TButton; WebBrowser1: TWebBrowser; procedure Button1Click(Sender: TObject); procedure ListBox1Click(Sender: TObject); private public end; const x = 'files/'; // папка в которой лежат все файлы var Form1: TForm1; implementation // функция, ищет все файлы с нужным расширением, и заносит в список // Mask - нужное расширение, просто рашрирение без точки function Search(Mask: String): TStringList; var SR: TSearchRec; begin Result := TStringList.Create; if FindFirst(x + '*.' + Mask, faAnyFile, SR) = 0 then repeat Result.Add(SR.Name); until FindNext(SR) <> 0; end; procedure TForm1.Button1Click(Sender: TObject); begin ListBox1.Clear; ListBox1.Items := Search('html'); // заполняем листбокс найденными файлами // можно подставить для n - нного колличества листбоксов end; procedure TForm1.ListBox1Click(Sender: TObject); begin // грузим в браузер выбранный из списка документ WebBrowser1.Navigate(ExtractFilePath(ParamStr(0))+x+ListBox1.Items[ListBox1.ItemIndex]); end; end.