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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Все links загруженной страницы [решено]  (Прочитано 3564 раз)
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« : Февраль 04, 2010, 19:46 »

Интересно, есть ли способ получить массив всех ссылок страницы (через qwebview или qwebpage или ещё как-то)?
qwebview.page().mainFrame().toHtml(); не катит, т.к. таким способом нельзя выловить js-ссылки.
« Последнее редактирование: Февраль 05, 2010, 14:13 от serg_hd » Записан

kubuntu/Win7/x64/NetBeans
sendevent
Гость
« Ответ #1 : Февраль 04, 2010, 20:28 »

%qtdir%/examples/webkit/fancybrowser
mainwindow.cpp#145:
Код:
void MainWindow::highlightAllLinks()
{
    QString code = "$('a').each( function () { $(this).css('background-color', 'yellow') } )";
    view->page()->mainFrame()->evaluateJavaScript(code);
}
намек ясен? ;-)
Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #2 : Февраль 04, 2010, 20:39 »

понятно, приступаемс Подмигивающий
Когда всё сделаю, отпишусь - полезная штука)
« Последнее редактирование: Февраль 04, 2010, 21:09 от serg_hd » Записан

kubuntu/Win7/x64/NetBeans
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #3 : Февраль 05, 2010, 14:09 »

Итак, как оказалось (в ходе экспериментов и изучения доков, за что sendevent отдельно спасибо) qt webkit позволяет кидать результаты работы js-скриптов прямо в ваш какой-либо qt-класс. Моя задача - найти все ссылки на странице, с учётом ссылок, сформированных яваскриптом, что очень важно - была решена след. образом:
Код
Java
 this.webview = new QWebView(Form);
 this.webview.load(new QUrl("http://google.ru"));
 //при окончании загрузки страницы работаем со слотом, извлекающим ссылки
 this.webview.loadFinished.connect(this, "func()");
 this.webview.setVisible(true);
 
public final void func()
{
 //дочерние фреймы страницы, если есть
 List<QWebFrame> framesList = this.webview.page().mainFrame().childFrames();
 //главный фрейм
 framesList.add(this.webview.page().mainFrame());
 /*собственно js-код, извлекающий ссылки, метод возвращает строку с разделителями, которая подвергнется дальнейшей обработке уже со стороны qt-инструментария*/
 String script = "function getAllLinks(){var res;for (i=0;i<document.links.length;i++){res += document.links[i].href + '[LINKS_SEPARATOR]';}return res.substring(0, (res.length - 17));}getAllLinks();";
 //перебор всех фреймов и извлечение из каждого набор ссылок
 Iterator iter = framesList.iterator();
 while(iter.hasNext())
 {
  QWebFrame frame = (QWebFrame) iter.next();
  this.resString += frame.evaluateJavaScript(script);
 }
 
 //вывод в консоль результирующей строки ссылок с разделителями
 System.out.println(this.resString.substring(13, this.resString.length()));
}
 

Примерно такой же сишный код (автор sendevent):
Код
C
QList<QWebFrame *> framesList = getView()->page()->mainFrame()->childFrames();
   framesList.prepend( getView()->page()->mainFrame() );
   QString script = "function getAllLinks(){var res;for (i=0;i<document.links.length;i++){res += document.links[i].href + '[MY_LINKS_SEPARATOR]';}return res;}getAllLinks();";
   QString resString;
   foreach( QWebFrame *pCurrentFrame, framesList )
   {
       resString += pCurrentFrame->evaluateJavaScript( script ).toString();
   }
 
   QStringList resStringList = resString.split( "[MY_LINKS_SEPARATOR]", QString::SkipEmptyParts, Qt::CaseInsensitive );
   qDebug( "finded %d links:", resStringList.size() );
   foreach( QString link, resStringList )
   {
       qDebug( "link: %s", qPrintable( link ) );
   }
 


Таким же образом можно выудить все картинки, тексты и др. информацию сформированную javascript'ом и не только. Полезным при такой проблеме также может стать метод addToJavaScriptWindowObject(), делает обратное: qt->js
« Последнее редактирование: Февраль 05, 2010, 14:24 от serg_hd » Записан

kubuntu/Win7/x64/NetBeans
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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