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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Пометка/выбор HTML элемента щелчком мыши на веб-странице  (Прочитано 3201 раз)
schmidt
Гость
« : Сентябрь 08, 2014, 17:03 »

Добрый вечер,

Не так давно обзавелся E-book reader'ом, в восторге от возможности читать любые тексты, "отлипнув" от экрана ноутбука Улыбающийся Однако не все веб-сайты предоставляют версии страниц "для печати" - нашел альтернативный способ: нахожу ID/классы лишних элементов, сохраняю bookmarklet в браузере для конкретного сайта, который по команде вырезает эти элементы с любой открытой страницы. Но уж очень мне стало лень инспектировать каждый элемент нового сайта, захотелось WYSIWYG: загрузил страницу, покликал по узлам, которые нужно удалить (а они бы подсвечивались в ответ Улыбающийся ) и автоматически получил готовый bookmarklet Улыбающийся

Хотелось бы сделать простенький загрузчик веб-страниц на Qt, который бы отображал страницу в окошечке и позволял отмечать элементы, щелкая по ним. И в отличие от полноценного браузера, он бы не ходил по ссылкам, только мог выделить их. Хочу узнать ваше мнение, господа, стоит ли делать это с подключением WebKit и возиться с его Javascript-обработчиками или есть альтернативные варианты разбора и отрисовки HTML/CSS с возможностью вывода их, например, в QGraphicsScene?
Записан
Bepec
Гость
« Ответ #1 : Сентябрь 08, 2014, 18:05 »

QWebView ваше всё. И да, там не надо вроде бы возиться с java обработчиками и прочим.
Ибо только он обладает совокупностью возможностей, которые покажут сайт таким же как и в браузере Улыбающийся

В принципе наверно... Наверно можно сделать, правда даже хром в этом деле лажает иногда.

В общем проведите ИР и выложите нам результат. Смотреть QWebPage и его методы.

(ИР - исследовательская работа)
Записан
schmidt
Гость
« Ответ #2 : Октябрь 06, 2014, 17:41 »

Увы, на данный момент не так-то просто поймать click-событие из элемента в C++/Qt коде, если только элемент не является ссылкой. Для ссылок есть специальный сигнал linkClicked(QUrl). В планах разработки QtWebKit (TODO List for QtWebKit) висит пункт

Цитировать
Add support for DOM events/listeners
    Add QWebElement::connectEvent()
    Add support for mapping JS events to Qt events (QMouseEvent, etc.)
    Add support for pure JS events (QWebEvent?)
    Add support for dispatching events from C++

но то, что этот список помечен как "Last Modified 4 years ago" надежд на появление этих функций в меня не вселяет Улыбающийся


Решил пойти иным путём: отображать DOM элементы в виде дерева, используя свою TreeModel+QTreeView, чтобы щелкать по элементам в них, но и здесь меня ждал сюрприз - все Webkit-методы, работающие с элементами, возвращают копии объектов QWebElement, а не постоянные указатели, поэтому использовать их в Qt Model/View "из коробки" не выходит, который требует, чтобы внутренние указатели индексов, возвращаемые методами index()/createIndex() были постоянными при неоднократных вызовах для одних и тех же row/column.
Вспомнил, что есть класс QWebInspector, который выводит DOM-структуру и решил заглянуть в его код, но меня сразу отпугнул тот факт, что он объявлен как friend по отношению к QWebFrame, который и владеет деревом элементов. Копаться по приватным структурам двух классов - небольшое удовольствие, учитывая множество однобуквенных переменных в классах Qt, о назначении которых я не имею ни малейших догадок. Чем могло быть вообще обусловлено решение возвращать копии объектов вместо указателей? Расчет на то, что использоваться элементы будут исключительно поодиночке? Так они сами же следом стали писать веб-инспектор, которому нужен доступ к дереву, естественно пришлось объявлять его как friend ) Мне кажется, или в их коде белки смешаны с бобрами?.. Или они намеренно так его спроектировали, чтобы в open-source реализации им можно было пользоваться только "как есть", побуждая покупать свои закрытые лицензии с возможностью внесения изменений в код?)
Записан
Bepec
Гость
« Ответ #3 : Октябрь 07, 2014, 00:06 »

Можно попробовать хакнуть элементы Веселый
У нас доступен жабаскрипт и мы можем модифицировать объекты. Что если мы модифицируем каждый объект на странице, установив его свойство onclick на вызов c++ метода с указанием кода элемента или его идентификатора?

Как думаете?


PS это бредовая идея даже на мой притуплённый вкус Веселый
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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