Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: PinkPanther от Ноябрь 09, 2009, 15:52



Название: (РЕШЕНО) Как получить содержимое веб-страницы?
Отправлено: PinkPanther от Ноябрь 09, 2009, 15:52
Господа, возник вроде как простой вопрос, но я пока не смог его решить.
Имеются куки в виде текста (переменная1=значение; переменная2=значение). Нужно запросить страницу, передав куки в запросе, и получить код страницы.
Как это сделать средствами Qt?


Название: Re: Как получить содержимое веб-страницы?
Отправлено: kibsoft от Ноябрь 09, 2009, 15:59
Сам не пробовал, но думаю, что смотреть надо в строну классов QWebPage, QWebView..посмотри в документации про QtWebKit Module.


Название: Re: Как получить содержимое веб-страницы?
Отправлено: PinkPanther от Ноябрь 09, 2009, 16:06
Сам не пробовал, но думаю, что смотреть надо в строну классов QWebPage, QWebView..посмотри в документации про QtWebKit Module.

Спасибо!
Вообще, ковыряюсь в них с утра - QWebView вроде как ничего содержательного, кроме ссылки на QWebPage, не выдаёт. QWebPage, в свою очередь, даёт ссылку на QWebFrame, который имеет 2 функции - toHtml() и toPlainText(). Первая возвращает только голый текст со страницы, вторая - подобие текста с разметкой, но с урезанным числом тэгов (в частности, нет <form>, а мне нужно получить значение оттуда). Не могу поверить, что функция, которая реализована во всех браузерах (исходный код - Ctrl-U), здесь недоступна.


Название: Re: Как получить содержимое веб-страницы?
Отправлено: ecspertiza от Ноябрь 09, 2009, 16:13
Ешё как вариант поковыряй QNetworkAccess и ижисним, там что то было для передачи  куков, страницу ты от него получишь если я не ошибаюсь в чистом html.


Название: Re: Как получить содержимое веб-страницы?
Отправлено: kibsoft от Ноябрь 09, 2009, 16:22
Да и еще поковыряйся в исходниках Qt Demo Browser qt\demos\browser, он умеет исходный код страницы выдавать :)
В файле browsermainwindow.cpp нашел
Код:
void BrowserMainWindow::slotViewPageSource()
{
    if (!currentTab())
        return;

    QString markup = currentTab()->page()->mainFrame()->toHtml();
    QPlainTextEdit *view = new QPlainTextEdit(markup);
    view->setWindowTitle(tr("Page Source of %1").arg(currentTab()->title()));
    view->setMinimumWidth(640);
    view->setAttribute(Qt::WA_DeleteOnClose);
    view->show();
}


Название: Re: Как получить содержимое веб-страницы?
Отправлено: catprog от Ноябрь 09, 2009, 20:11
QHttp и QHttpRequestHeader
только им на смену вроде будут или есть уже другие классы, в новых версиях QT


Название: Re: Как получить содержимое веб-страницы?
Отправлено: PinkPanther от Ноябрь 09, 2009, 20:16
Код:
QString markup = currentTab()->page()->mainFrame()->toHtml();
QPlainTextEdit *view = new QPlainTextEdit(markup);

Спасибо большое! Собственно, примерно так и делал, но допустил ошибку в другом месте. А вот проверить никак не мог - о QPlainTextEdit забыл напрочь. Так бы и не догадался им воспользоваться. Вроде прога заработала, во всяком случае, в полуручном режиме - куки ловлю при авторизации сниффером и скармливаю в окошко, а она их потом пихает в заголовок...  :)

Цитировать
Ешё как вариант поковыряй QNetworkAccess и ижисним, там что то было для передачи  куков, страницу ты от него получишь если я не ошибаюсь в чистом html

Вероятно, это более грамотный вариант, чем брать страницу из браузера - долго не мог въехать, что QNetworkReply по сути являет собой буфер. Спасибо за совет!