Форум сайта python.su
Если добавить вывод отладочных сообщения JS
import sys from PyQt4 import QtWebKit from PyQt4.QtCore import * from PyQt4.QtGui import * from PyQt4.QtWebKit import * from PyQt4.QtNetwork import * settings = QtWebKit.QWebSettings.globalSettings() settings.setAttribute(QtWebKit.QWebSettings.JavascriptEnabled, True); settings.setAttribute(QtWebKit.QWebSettings.PluginsEnabled, True) QNetworkProxy.setApplicationProxy(QNetworkProxy(QNetworkProxy.HttpProxy, "127.0.0.1", 8888)) class MyPage(QWebPage): def javaScriptConsoleMessage(self, message, lineNumber, sourceID): print lineNumber, message, sourceID app = QApplication(sys.argv) web = QWebView() web.setPage(MyPage()) web.load(QUrl("http://ru.grepolis.com")) web.show() sys.exit(app.exec_())
0 SECURITY_ERR: DOM Exception 18: An attempt was made to break through the secur
ity policy of the user agent. undefined
0 ReferenceError: Can't find variable: Happening undefined
Офлайн
Посмотрел в Гугл, очень мало информации, толком разобрать не смог. Может дело в user agent? Он ведь неправильный передает…
Помогите в мой код внедрить толковый user agent, пожалуйста, вдруг поможет…
например:
useragent = “Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.28) Gecko/20120306 Firefox/3.6.28”
Как его вставить в мой код?
Отредактировано Seganapa (Ноя. 1, 2012 07:16:34)
Офлайн
SeganapaНу есть же в гугле, нужно переопределить userAgentForUrl в QWebPage.
Как его вставить в мой код
Офлайн
В гугле то есть, но у меня не получается применить useragent к моему коду (примеры все с классами)… Если не трудно, покажите на моем коде…
а может дело вообще в headers? Как думаете, может нужно точно повторять заголовки???
Нашел код браузера на PyQT
http://www.rkblog.rk.edu.pl/w/p/webkit-pyqt-rendering-web-pages/
Хотел им проверить, вдруг загрузит, но запустить его так и не получилось… Моих знаний Python еще не достаточно.
Ув. reclosedev, не могли бы вы попробовать загрузить Grepolis с помощью этого браузера, вдруг получится, тогда я бы мог использовать его в своем приложении?
Отредактировано Seganapa (Ноя. 1, 2012 11:29:56)
Офлайн
Seganapa
но у меня не получается применить useragent к моему коду (примеры все с классами)… Если не трудно, покажите на моем коде…
SeganapaПробуйте еще, разбирайтесь, если так нужно. Делать все за вас нет никакого желания.
не могли бы вы попробовать загрузить Grepolis с помощью этого браузера, вдруг получится, тогда я бы мог использовать его в своем приложении?
Офлайн
Все таки удалось запустить этот браузер (http://www.rkblog.rk.edu.pl/w/p/webkit-pyqt-rendering-web-pages/), но он тоже к сожалению не загрузил grepolis…
Отредактировано Seganapa (Ноя. 2, 2012 17:58:41)
Офлайн
Продолжается моя эпопея с внедрением браузера в мое приложение.
Так и не удалось мне отыскать причину, по которой webkit ну никак не хочет полностью догружать страницу ru.grepolis.com
Перечитал огромную кучу информацию, перевел немереное количество текста, но ответа так и не нашел. Очень грустно.
В итоге набрел на проект cefpython (http://code.google.com/p/cefpython/). Это Chromium Embedded Framework (Фреймворк привязок Google Chrome)
Он подходит для решения моей задачи как нельзя лучше!
Вот пример кода для загрузки страницы grepolis:
# An example of embedding CEF in wxPython application. #coding:utf-8 import wx import sys import time import cefpython # TODO: currently we use wx.Timer to imitate message loop, but # it would probably be better to use wx.CallLater() and wx.lib.pubsub. class MainFrame(wx.Frame): browser = None def __init__(self): wx.Frame.__init__(self, parent=None, id=wx.ID_ANY, title='wxPython example', size=(1000,800)) self.CreateMenu() self.browser = cefpython.CreateBrowser(self.GetHandle(), browserSettings={}, navigateURL="http://ru.grepolis.com") self.Bind(wx.EVT_SET_FOCUS, self.OnSetFocus) self.Bind(wx.EVT_SIZE, self.OnSize) def CreateMenu(self): filemenu = wx.Menu() filemenu.Append(1, "Открыть") filemenu.Append(2, "Выход") aboutmenu = wx.Menu() aboutmenu.Append(1, "CEF Python") menubar = wx.MenuBar() menubar.Append(filemenu,"&File") menubar.Append(aboutmenu, "&About") self.SetMenuBar(menubar) def OnSetFocus(self, event): cefpython.wm_SetFocus(self.GetHandle(), 0, 0, 0) def OnSize(self, event): cefpython.wm_Size(self.GetHandle(), 0, 0, 0) class MyApp(wx.App): timer = None timerID = 1 def OnInit(self): cefpython.Initialize() sys.excepthook = cefpython.ExceptHook self.timer = wx.Timer(self, self.timerID) self.timer.Start(10) # 10ms wx.EVT_TIMER(self, self.timerID, self.OnTimer) frame = MainFrame() self.SetTopWindow(frame) frame.Show() return True def OnExit(self): self.timer.Stop() cefpython.Shutdown() def OnTimer(self, event): cefpython.SingleMessageLoop() if __name__ == '__main__': print('wx.version=%s' % wx.version()) app = MyApp(False) app.MainLoop()
Отредактировано Seganapa (Ноя. 9, 2012 09:05:29)
Офлайн