Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 31, 2012 18:11:00

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Эмуляция браузера PyQT4

Если добавить вывод отладочных сообщения 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
Беглое гугление дало
http://lfranchi.wordpress.com/2011/08/16/tomahawk-0-2-released/#comment-50

Похоже, проблема QtWebkit. Поищите, может еще что найдете.

Офлайн

#2 Ноя. 1, 2012 07:10:02

Seganapa
От: Новороссийск
Зарегистрирован: 2012-07-31
Сообщения: 139
Репутация: +  0  -
Профиль   Отправить e-mail  

Эмуляция браузера PyQT4

Посмотрел в Гугл, очень мало информации, толком разобрать не смог. Может дело в 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”

Как его вставить в мой код?



—————————————————————–
Изучаю и параллельно использую Python 2.7

Отредактировано Seganapa (Ноя. 1, 2012 07:16:34)

Офлайн

#3 Ноя. 1, 2012 07:30:34

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Эмуляция браузера PyQT4

Seganapa
Как его вставить в мой код
Ну есть же в гугле, нужно переопределить userAgentForUrl в QWebPage.
Вчера пробовал, не помогло.

Офлайн

#4 Ноя. 1, 2012 11:08:46

Seganapa
От: Новороссийск
Зарегистрирован: 2012-07-31
Сообщения: 139
Репутация: +  0  -
Профиль   Отправить e-mail  

Эмуляция браузера PyQT4

В гугле то есть, но у меня не получается применить useragent к моему коду (примеры все с классами)… Если не трудно, покажите на моем коде…

а может дело вообще в headers? Как думаете, может нужно точно повторять заголовки???

Нашел код браузера на PyQT
http://www.rkblog.rk.edu.pl/w/p/webkit-pyqt-rendering-web-pages/

Хотел им проверить, вдруг загрузит, но запустить его так и не получилось… Моих знаний Python еще не достаточно.

Ув. reclosedev, не могли бы вы попробовать загрузить Grepolis с помощью этого браузера, вдруг получится, тогда я бы мог использовать его в своем приложении?



—————————————————————–
Изучаю и параллельно использую Python 2.7

Отредактировано Seganapa (Ноя. 1, 2012 11:29:56)

Офлайн

#5 Ноя. 1, 2012 16:24:21

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Эмуляция браузера PyQT4

Seganapa
но у меня не получается применить useragent к моему коду (примеры все с классами)… Если не трудно, покажите на моем коде…
Seganapa
не могли бы вы попробовать загрузить Grepolis с помощью этого браузера, вдруг получится, тогда я бы мог использовать его в своем приложении?
Пробуйте еще, разбирайтесь, если так нужно. Делать все за вас нет никакого желания.

Офлайн

#6 Ноя. 2, 2012 17:58:18

Seganapa
От: Новороссийск
Зарегистрирован: 2012-07-31
Сообщения: 139
Репутация: +  0  -
Профиль   Отправить e-mail  

Эмуляция браузера PyQT4

Все таки удалось запустить этот браузер (http://www.rkblog.rk.edu.pl/w/p/webkit-pyqt-rendering-web-pages/), но он тоже к сожалению не загрузил grepolis…



—————————————————————–
Изучаю и параллельно использую Python 2.7

Отредактировано Seganapa (Ноя. 2, 2012 17:58:41)

Офлайн

#7 Ноя. 9, 2012 09:04:43

Seganapa
От: Новороссийск
Зарегистрирован: 2012-07-31
Сообщения: 139
Репутация: +  0  -
Профиль   Отправить e-mail  

Эмуляция браузера PyQT4

Продолжается моя эпопея с внедрением браузера в мое приложение.
Так и не удалось мне отыскать причину, по которой 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()

Проверил, все грузится полностью, как нужно… Но вот теперь возник другой вопрос!

КАК ЖЕ ТЕПЕРЬ АВТОМАТИЗИРОВАТЬ ЗАПОЛНЕНИЕ ВВОДА ЛОГИНА И ПАРОЛЯ И НАЖАТЬ НА КНОПКУ АВТОРИЗАЦИИ?

Возможно ли это? Какими средствами? Кто сталкивался? Безуспешно гуглил, очень мало информации по cefpython. Думал написать разработчику, но в связи с трудностями в английском, не могу правильно составить (сформулировать) свой вопрос.

Очень нуждаюсь в помощи…



—————————————————————–
Изучаю и параллельно использую Python 2.7

Отредактировано Seganapa (Ноя. 9, 2012 09:05:29)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version