Russian Qt Forum

Qt => Общие вопросы => Тема начата: gil9red от Декабрь 15, 2016, 16:14



Название: [РЕШЕНО] Сайт через QWebView не грузится
Отправлено: gil9red от Декабрь 15, 2016, 16:14
Попробовал загрузить http://gama-gama.ru и что-то не выходит

Код
C++ (Qt)
#include <QApplication>
#include <QtWebKit/QWebView>
 
int main(int argc, char *argv[])
{
   QApplication a(argc, argv);
 
   QWebView *view = new QWebView();
   view->load(QUrl("http://gama-gama.ru/"));
   view->show();
 
   return a.exec();
}
 


Может, кто-то на свежую голову расскажет в чем проблема? :)


Название: Re: Сайт через QWebView не грузится
Отправлено: Bepec от Декабрь 15, 2016, 22:19
Как вариант не включены скрипты, сайт видит сырой заголовок клиентайди или как то так и не отдаёт данные, или сайт подгружает данные из https :D


Название: Re: Сайт через QWebView не грузится
Отправлено: kambala от Декабрь 15, 2016, 22:34
это Qt 4 нужен что ли? не нашел у себя в 5.6 QWebView.


Название: Re: Сайт через QWebView не грузится
Отправлено: gil9red от Декабрь 16, 2016, 08:27
Как вариант не включены скрипты, сайт видит сырой заголовок клиентайди или как то так и не отдаёт данные, или сайт подгружает данные из https :D

Скрипты включены они вроде бы по умолчанию включены
Клиентайди, т.е. User-Agent?
А вот вариант с подгрузкой данных по https интересен...

Сам сайт при обращении подсовывает html с куском яваскрипта, данных еще нет, потом что-то делает и вжух -- страница загрузилась, и при загрузке в QWebView страница грузится-грузится и потом View предлагает убить скрипт, мол долго выполняется


Да, я на 4-й тестировал, kambala, можешь на 5-й версии проверить?


Название: Re: Сайт через QWebView не грузится
Отправлено: Bepec от Декабрь 16, 2016, 09:50
Да, юзер агент. А насчёт Https скорее всего так и есть. У вас какой нить node.js подгружаться пытается из https google хранилища. Соответственно без openssl у него нифига не получается, вот он и виснет.

PS выведите ошибки SSL, хоть определитесь есть они или нет.
PPS скачайте себе openssl, установите, попробуйте. Там есть ещё пара хитрых трюков типо установки ssl сертификата по умолчанию и редактирование Network профиля, но я их уже и не помню, а проектов чего то не нашёл :D


Название: Re: Сайт через QWebView не грузится
Отправлено: gil9red от Декабрь 16, 2016, 14:34
Смог отловить ошибку javascript при прогрузке страницы:

Цитировать
https://tars2.variti.net/share/sTfhpQ1NNiE1?sid=108&scheme=http&host=gama-gama.ru&uri=%2f&t=1481887794050&sad=v%2fsDgAmg%3d%3d&uid=S3aNTqjdIWnAGbMa&uct=1481887794049&kct=0&m=4&ver=3&v=L-mhS1cp_IRSH9__0NynhQ&test=1NNiE1 line 3: JavaScript execution exceeded timeout.

Для этого в наследнике от QWebPage переопределил функцию. А еще я в нем поменял User-Agent:

Код
Python
class UserAgentWebPage(QWebPage):
   def userAgentForUrl(self, url):
       return "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0"
 
   def javaScriptConsoleMessage(self, msg, line, source):
       print('%s line %d: %s' % (source, line, msg))
 


А вот собственно это и приходит при загрузке:
Код:
<html><head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <meta http-equiv="refresh" content="10;URL=/ciez2a">
<script src="https://tars2.variti.net/share/aYfXXK0DJ4Y1?sid=108&amp;scheme=http&amp;host=gama-gama.ru&amp;uri=%2f&amp;t=1481888076642&amp;sad=v%2fsDgAmg%3d%3d&amp;uid=iUHgqjLXqoGlw0TH&amp;uct=1481888076641&amp;kct=0&amp;m=4&amp;ver=3&amp;v=T7XgbckrrOYo_1d7_7tM3g&amp;test=0DJ4Y1"></script></head>
<body>
  <script type="text/javascript">
    var head    = document.getElementsByTagName("head")[0];
    var script  = document.createElement("script");
    var done    = false; // Handle Script loading
                
    var url     = "https://tars2.variti.net/share/aYfXXK0DJ4Y1?sid=108&scheme=http&host=gama-gama.ru&uri=%2f&t=1481888076642&sad=v%2fsDgAmg%3d%3d&uid=iUHgqjLXqoGlw0TH&uct=1481888076641&kct=0&m=4&ver=3&v=T7XgbckrrOYo_1d7_7tM3g";
    if (window.callPhantom || window._phantom || window.__phantomas) {
      url = url + "&test=aYfXXK";
    } else {
      url = url + "&test=0DJ4Y1";
    }
    script.src = url;
    script.onload = script.onreadystatechange = function() { // Attach handlers for all browsers
      if ( !done && (!this.readyState || this.readyState === "loaded" || this.readyState === "complete") ) {
        done = true;
        ipp.setCookie();
        location.href="http://gama-gama.ru/?utm_referrer=";
        script.onload = script.onreadystatechange = null; // Handle memory leak in IE
      }
    };
    head.appendChild(script);          
  </script>

</body></html>

Фигня какая-то... Ловля ssl ошибок через слот sslErrorHandler ничего не отобразило


Название: Re: Сайт через QWebView не грузится
Отправлено: kambala от Декабрь 16, 2016, 18:03
все работает, 5.6.2, macOS 10.12
Код
C++ (Qt)
#include <QApplication>
#include <QWebEngineView>
 
int main(int argc, char *argv[])
{
   QApplication app(argc, argv);
 
   QWebEngineView w;
   w.load(QUrl("http://gama-gama.ru/"));
   w.show();
 
   return app.exec();
}


Название: Re: Сайт через QWebView не грузится
Отправлено: gil9red от Декабрь 16, 2016, 19:10
Проверил на Qt5 -- работает.
Похоже, дело в движках. Qt4 использует WebKit, а Qt5 -- Chromium, а точнее, то, что тот сайт похоже использует какие-то фишки, которые не смог "переварить" WebKit


Код
Python
url = 'http://gama-gama.ru/'
 
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtWebEngineWidgets import *
 
 
app = QApplication([])
 
view = QWebEngineView()
view.setWindowTitle('Qt5 QWebEngineView')
view.show()
 
view.load(QUrl(url))
 
app.exec()
 

Код
Python
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *
 
 
app = QApplication([])
 
view = QWebView()
view.setWindowTitle('Qt4 QWebView')
view.show()
 
view.load(QUrl(url))
 
app.exec()