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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QWebView  (Прочитано 5815 раз)
Andrey7
Гость
« : Август 08, 2010, 16:30 »

Здравствуйте. Недавно загорелся написать автокликер для одного сайта. Суть такова - я даю программе ссылку, она открывает эту ссылку с помощью QWebView и и кликает сама по ссылкам которые я задам по умолчанию в программе.. Тоесть например сама находит на странице link и сама же переходит по нему. Возможно ли это реализовать? И если да подскажите как можно осуществить поиск нужной ссылки на странице и переход по ней. заранее благодарен
Записан
Joss
Гость
« Ответ #1 : Август 08, 2010, 19:13 »

А зачем QWebView для этого?
Записан
Andrey7
Гость
« Ответ #2 : Август 08, 2010, 21:47 »

а есть другие варианты?
Записан
Joss
Гость
« Ответ #3 : Август 08, 2010, 22:17 »

QNetworkAccessManager
Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #4 : Август 09, 2010, 02:27 »

не всё так просто как кажется  Улыбающийся
Записан

kubuntu/Win7/x64/NetBeans
Andrey7
Гость
« Ответ #5 : Август 09, 2010, 12:56 »

Код:
{
    view = new QWebView(this);
    view->load(QUrl("http://cайт.ру"));
    setCentralWidget(view);
    QString code = "document.forms.submit()";
    view->page()->mainFrame()->evaluateJavaScript(code);


}


подскажите пожалуйста где я ошибся?
Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #6 : Август 09, 2010, 13:21 »

я так и не понял, что нужно? Переходить по ссылкам или отсылать формы?
Если по ссылкам, то для получения всех ссылок страницы, метод типа такого:
Код
C++ (Qt)
void Tools::getPageLinks(ListOfMappedStrings* listOfAllLinks, QWebView* webview)
{
QString strUrl;
QList<QWebFrame*> framesList(webview->page()->mainFrame()->childFrames()); //add parent frames
framesList.append(webview->page()->mainFrame()); //and main frame
 
QString resString = ""; //full data strings
const QString& jScript = "function getAllLinks(){var res;for (i=0; i<document.links.length; i++)"
"{res += document.links[i].innerHTML + '[DATALINK_SEPARATOR]' + document.links[i].href + '[LINKS_SEPARATOR]';}"
"return res.substring(0, (res.length - 17));}getAllLinks();";
 
QList<QVariant> list; //only for item contains control
foreach(QWebFrame* wFrame, framesList)
{
 if (wFrame->childFrames().size() > 0)
 {
  //parsing child frames
  foreach (QWebFrame* wFrameChild, wFrame->childFrames())
  {
   const QVariant& obj = wFrameChild->evaluateJavaScript(jScript);
   if (!list.contains(obj))
   {
    list.append(obj);
    resString += obj.value<QString>();
   }
  }
 }
 //main frame
 const QVariant& obj = wFrame->evaluateJavaScript(jScript);
 if (!list.contains(obj))
 {
  list.append(obj);
  resString += obj.value<QString>();
 }
}
 
resString.replace("null", "");
resString.replace("undefined", "");
QStringList strList = resString.split("[LINKS_SEPARATOR]");
if (strList.size() > 1)
{
 foreach (QString strItem, strList)
 {
  const QStringList& subStrList = strItem.split("[DATALINK_SEPARATOR]");
  QMap<QString, QString> map;
  map.insert("text", subStrList[0].trimmed());
  strUrl = subStrList[1].trimmed();
  map.insert("url", strUrl);
  listOfAllLinks->append(map);
 }
}
}
 

Код можно несколько сократить, но давно писал и лень уже).
ListOfMappedStrings это QMap(QString, QString).
Имея контейнер ссылок, грузишь какие надо через load(). При этом, конечно, не забываешь про подмену referrer'a, других заголовков, сохранения и загрузки cookies и т.п. Подмигивающий
« Последнее редактирование: Август 09, 2010, 14:02 от serg_hd » Записан

kubuntu/Win7/x64/NetBeans
Andrey7
Гость
« Ответ #7 : Август 09, 2010, 17:36 »

Аха.. Спасибо разобрался. Теперь другой вопрос. Задам тут же чтобы не плодить темы. Вот эта весчь заружает страницу 
Код:
view->load(QUrl("http://блаблабла.ру"));
как можно загружать эту же страницу только без картинок?
Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #8 : Август 09, 2010, 17:55 »

наверное
Код
C++ (Qt)
this->webView.page()->settings()->setAttribute(QWebSettings::AutoLoadImages, false);
а вообще не пробовал
Записан

kubuntu/Win7/x64/NetBeans
Andrey7
Гость
« Ответ #9 : Август 10, 2010, 01:06 »

Да эта штука работает! Спасибо!  Улыбающийся Улыбающийся Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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