Russian Qt Forum
Ноябрь 22, 2024, 16:53 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Захват данных при загрузке дочерних фреймов  (Прочитано 9487 раз)
Den
Гость
« : Июнь 27, 2012, 15:47 »

Здравствуйте

Есть данные которые хранятся в зашифрованном виде в html страницах, я пишу программу которая позволяет просматривать эти страницы.
В общих чертах реализовано это так

Код:
QFileInfo info(QApplication::applicationFilePath());
//Путь к файлу
   QString htmlFile = info.dir().filePath("frame.htm");
//Массив в котором будет хранится содержимое файла
    QByteArray data;
//Класс отвечающий за дешифрацию
    Kripto kript;
//Считываем их файла зашифрованные данные, дешифруем и помещаем в data
    data=kript.start(htmlFile);
//(WebV наследник QWebView) загружаем дешифрованные данные в QWebView
    WebV->setHtml(data,QUrl::fromLocalFile(htmlFile));
//Все нормально показывает
    WebV->show();

Проблема заключается в том, что если html файл содержит в себе фреймы <frame> то сам он дешифруется нормально, а вот файлы которые выводятся в фреймах не дешифруются.

Приведу пример:

Есть html с таки кодом

Код:
<html>
    <head>
        <title>Фреймы в html</title>
    </head>
    <frameset rows="50%, 50%" >
        <frame src="1.htm">
        <frame src="2.htm">
    </frameset>
</html>

При срабатывании программы получаем следующее



Как мы видим основная страница выглядит нормально, а вот те две которые подгружаются в нее не дешифрованы.

Требуется перехватить загрузку страниц в дочерние фреймы, дешифровать, а затем отправить обратно.
Записан
Bepec
Гость
« Ответ #1 : Июнь 27, 2012, 15:52 »

К сожалению не вижу расшифрованной части Улыбающийся

А в чём проблема фреймы напрямую загрузить?
Записан
mutineer
Гость
« Ответ #2 : Июнь 27, 2012, 16:04 »

Покопай в сторону класса QWebFrame
Кроме того посмотри на
Код:
void QWebPage::frameCreated ( QWebFrame * frame ) [signal]
« Последнее редактирование: Июнь 27, 2012, 16:06 от mutineer » Записан
Den
Гость
« Ответ #3 : Июнь 27, 2012, 16:09 »

1) Расшифрован основной фрейм, именно благодаря этому мы можем видеть два дочерних фрейма, ели бы он был не расшифрован, все окно представляло бы собой набор таких символов. Мешает то что нужен  механизм, ибо страниц тысячи и  появляются новые и комбинации фреймов в них самые разные, там и тект и рисунки и таблицы и т.д.

2) Это как бы очевидно, я уже по уши в QWebFrame закопался пока выхода не вижу.
Записан
mutineer
Гость
« Ответ #4 : Июнь 27, 2012, 16:11 »

2) Это как бы очевидно, я уже по уши в QWebFrame закопался пока выхода не вижу.

Откуда это очевидно?
Записан
Den
Гость
« Ответ #5 : Июнь 27, 2012, 16:35 »

Ну я сразу начал разбираться в структуре QWebKit и QWebFrame  показался мне наиболее перспективным классом, хотя решение может быть и не в нем.  Улыбающийся

frameCreated интересная идея, только что-то не приходит сигнал
Записан
Bepec
Гость
« Ответ #6 : Июнь 27, 2012, 16:48 »

А можно у вас спросить примерчик html ки с алгоритмиков дешифровки? Улыбающийся

Записан
Den
Гость
« Ответ #7 : Июнь 28, 2012, 09:49 »

Класс шифровки дешифровки реализовывал не я поэтому извините. Html файл я привел, или какой вам?

Так что, есть идеи?
Записан
Bepec
Гость
« Ответ #8 : Июнь 28, 2012, 10:51 »

Я бы упростил задачу % на 350. Улыбающийся

Берёте ссылку на этот html, тупо его читаете. Расшифровываете. Находите там ссылки на фреймы. Читаете, расшифровываете. Находите там ссылки и прочая прочая прочая в цикле.
А потом просто создаёте расшифрованную копию с нужной структурой и усё.

В чём проблема? Улыбающийся

PS и класс расшифровщика у вас видимо подточен на работу с 1 страницей. Так и используйте его. Последовательная расшифровка и никакого волшебства.

PPS *зануда ON* В результате у вас будет темповый расшифрованный результат, который можно открыть в любом браузере(в том числе и вебвьев).*зануда OFF*
« Последнее редактирование: Июнь 28, 2012, 10:56 от Bepec » Записан
Den
Гость
« Ответ #9 : Июнь 28, 2012, 11:42 »

Такая идея приходила мне в голову, я просто испытываю сомнения, правильно ли так делать? Опыт мне подсказывает что есть место где происходит собственно считывание данных по ссылкам и загрузка считанных тегов в фреймы, если его найти и вставить туда дешифратор то будет элегантное решение, его то я и ищу. Но, конечно, если не найду придется сделать так как вы предложили.
« Последнее редактирование: Июнь 28, 2012, 12:02 от Den » Записан
Bepec
Гость
« Ответ #10 : Июнь 28, 2012, 12:02 »

Я вам больше скажу - это место вы не сможете использовать. Это приватные вроде бы методы.
И в webView в page() mainFrame() и других frame вы найдете уже "скомпилированный" код html ки.

Я думаю, так даже правильнее делать. QWebView  в вашем случае ммм... избыточен. Ведь задача - расшифровать. А показывать можно и потом.
Записан
Den
Гость
« Ответ #11 : Июнь 28, 2012, 14:55 »

Возник еще такой вопрос, некоторые страницы содержат картинки, картинки эти также зашифрованы, где тот механизм который загружает картинку на страницу по тегу <img>?
Записан
Bepec
Гость
« Ответ #12 : Июнь 28, 2012, 15:04 »

Недра FrameLoader'а хранят в себе эту тайну.
Записан
Den
Гость
« Ответ #13 : Июнь 28, 2012, 15:06 »

Это да, я весь его отDebugил, я так понимаю вмешиваться в работу FrameLoadera не рекомендуется?
Записан
Bepec
Гость
« Ответ #14 : Июнь 28, 2012, 15:12 »

Он жеж вроде приватный. Я бы не советовал - слишком ... слишком многое можешь порушить Веселый

Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.046 секунд. Запросов: 21.