Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

Купить рекламу на форуме 15-35 тыс рублей в месяц

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2021, 15:56   #1
Chaser_81
Пользователь
 
Регистрация: 09.04.2007
Сообщений: 35
Лампочка Получение кода страницы TChromium CEF4Delphi для SPA сайтов

Возникла необходимость вытащить код страницы в скрытом режиме (без визуализации сайта).
Попробовал решить эту проблему по алгоритму из форума https://www.briskbard.com/forum/viewtopic.php?t=102
Для обычных сайтов такая последовательность работает стабильно и корректно.
Но при попытке работать со SPA сразу возникла проблема: после загрузки основного фрейма такие сайты подгружают много дополнительного контента, но TChromium похоже уже не отслеживает этот процесс и событие onLoadEnd не вызывается. Хотя onLoadingProgressChange может произойти. По истечении какого-то времени (тоже предсказать не дано) можно повторить вызов RetrieveHTML, но даже в этом случае мы не всегда получим весь контент.
На том же https://www.mvideo.ru/ вообще судя по всему несколько фреймов, которые грузятся только после физической прокрутки страницы до конца вниз. Соответственно, получаем далеко не весь код.

Есть ли в TChromium возможность отследить весь этап работы SPA сайта до полной загрузки контента?

Для получения кода страницы использую последовательность:

1. Chrom.LoadURL(edURLs.Text)
2. В событие onLoadEnd вызываем RetrieveHTML

Код:
procedure TfmReqTest.ChromLoadEnd(Sender: TObject; const browser: ICefBrowser;
  const frame: ICefFrame; httpStatusCode: Integer);
begin
 if frame.IsMain and Browser.IsLoading then 
     Chrom.RetrieveHTML();
end;
3. В событии onextResultAvailable забираем код

Код:
procedure TfmReqTest.ChromTextResultAvailable(Sender: TObject;
  const aText: ustring);
var
  HTML: string;
  ContentLang, CharSet: string;
begin
  HTML := aText;
  // .......
end;
SiteAnalyzer - анализ и аудит сайта. Telegram: @majento
Chaser_81 вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
cef4delphi TChromium. Как получить содержимое тегов? Женя32 Работа с сетью в Delphi 0 01.03.2021 10:26
cef4delphi TChromium. Undeclared identifier: 'ICefBrowser', 'ICefFrame' Женя32 Работа с сетью в Delphi 0 26.02.2021 20:06
cef4delphi TChromium. Как загрузить сайт? Женя32 Компоненты Delphi 1 22.02.2021 14:30
Формат разработки веб-сайтов давно стал смещаться в сторону single page app. PHP для написания API для SPA не подходит mirvam Общие вопросы Web 3 03.09.2018 08:36
Получение HTML-кода страницы Joltd Общие вопросы C/C++ 3 02.11.2008 17:54